From c44ec183b6e00bec7bfc1322a884e786744c27fd Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 05 八月 2021 19:07:06 +0800
Subject: [PATCH] 9134 【BT3】【主干】新增物品获得活动积分(增加给货币通用效果ID264,A值数量,B值货币类型)

---
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerAssist.py |   89 ++++++++++++++++++++++++++++++--------------
 1 files changed, 61 insertions(+), 28 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerAssist.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerAssist.py
index d8d046f..143f5de 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerAssist.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerAssist.py
@@ -145,6 +145,25 @@
         
     return
 
+def OnPlayerTeamChange(curPlayer):
+    ## 玩家队伍变更
+    
+    if curPlayer.GetTeamID():
+        return
+    playerID = curPlayer.GetPlayerID()
+    
+    assistMgr = PyDataManager.GetPlayerAssistPyManager()
+    if playerID not in assistMgr.playerNoSaveDBAssistDict:
+        return
+    playerAssistList = assistMgr.playerNoSaveDBAssistDict[playerID]
+    
+    for assistObj in playerAssistList[::-1]:
+        gameMap = GameWorld.GetMap(assistObj.MapID)
+        if gameMap and gameMap.GetMapFBType() == ChConfig.fbtTeam:
+            OnCancelPlayerRequestAssist(assistObj, "LeaveTeam", True)
+            
+    return
+
 def OnInitAssistData(dbData, isSaveDB):
     ## 加载协助数据额外处理
     setattr(dbData, "IsSaveDB", isSaveDB) # 是否保存数据库,离线可协助的需要存库,如挖矿类
@@ -229,7 +248,10 @@
     if not playerMap:
         return
     if playerMap.GetMapFBType() != ChConfig.fbtNull:
-        playerLineID = curPlayer.GetFBID()
+        if mapID == ChConfig.Def_FBMapID_SealDemon:
+            playerLineID = PlayerControl.GetFBFuncLineID(curPlayer)
+        else:
+            playerLineID = curPlayer.GetFBID()
         if playerMapID != mapID or playerLineID != lineID:
             #副本中无法协助
             PlayerControl.NotifyCode(curPlayer, "AssistFBLimit")
@@ -431,8 +453,8 @@
     
     playerID = curPlayer.GetPlayerID()
     
-    assistObj = None
-    addNewAssist = True
+    reqAssistObj = None
+    addNewAssist = False
     assistMgr = PyDataManager.GetPlayerAssistPyManager()
     if playerID in assistMgr.playerNoSaveDBAssistDict:
         playerAssistList = assistMgr.playerNoSaveDBAssistDict[playerID]
@@ -442,17 +464,18 @@
             if npcID != assistObj.NPCID or lineID != assistObj.LineID or objID != assistObj.ObjID:
                 OnCancelPlayerRequestAssist(assistObj, "RequestNewAssistBoss", True)
             else:
-                addNewAssist = False
+                reqAssistObj = assistObj
             break
         
-    if addNewAssist:
-        assistObj = __AddNewAssist(assistMgr, curPlayer, mapID, lineID, npcID, objID)
+    if not reqAssistObj:
+        addNewAssist = True
+        reqAssistObj = __AddNewAssist(assistMgr, curPlayer, mapID, lineID, npcID, objID)
         
-    if not assistObj:
+    if not reqAssistObj:
         return
     
     # 通知本仙盟玩家
-    PlayerFamily.SendFamilyFakePack(familyID, GetAssistInfoListPack([assistObj]))
+    PlayerFamily.SendFamilyFakePack(familyID, GetAssistInfoListPack([reqAssistObj]))
     # 求助信息已发送,请等待盟友支援
     PlayerControl.NotifyCode(curPlayer, "AssistRequestOK")
     
@@ -475,7 +498,7 @@
     
     playerID = curPlayer.GetPlayerID()
     
-    assistObj = None
+    reqAssistObj = None
     addNewAssist = False
     assistMgr = PyDataManager.GetPlayerAssistPyManager()
     if playerID in assistMgr.playerNoSaveDBAssistDict:
@@ -485,19 +508,19 @@
                 continue
             if mapID != assistObj.MapID or lineID != assistObj.LineID:
                 OnCancelPlayerRequestAssist(assistObj, "RequestNewAssistTeamFB", True)
-                addNewAssist = True
-                break
-    else:
+            else:
+                reqAssistObj = assistObj
+            break
+        
+    if not reqAssistObj:
         addNewAssist = True
+        reqAssistObj = __AddNewAssist(assistMgr, curPlayer, mapID, lineID)
         
-    if addNewAssist:
-        assistObj = __AddNewAssist(assistMgr, curPlayer, mapID, lineID)
-        
-    if not assistObj:
+    if not reqAssistObj:
         return
     
     # 通知本仙盟玩家
-    PlayerFamily.SendFamilyFakePack(familyID, GetAssistInfoListPack([assistObj]))
+    PlayerFamily.SendFamilyFakePack(familyID, GetAssistInfoListPack([reqAssistObj]))
     # 求助信息已发送,请等待盟友支援
     PlayerControl.NotifyCode(curPlayer, "AssistRequestOK")
     # 广播仙盟请求
@@ -555,6 +578,7 @@
     for assistObj in familyAssistList:
         assistInfo = ChPyNetSendPack.tagGCAssistInfo()
         assistInfo.AssistGUID = assistObj.GUID
+        assistInfo.PlayerID = assistObj.PlayerID
         assistInfo.PlayerName = assistObj.PlayerName
         assistInfo.Job = assistObj.Job
         assistInfo.LV = assistObj.LV
@@ -789,23 +813,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
@@ -830,12 +860,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