From 50cabbbc229d1adc0e427df765cab2dc0889cdf1 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 15 一月 2020 15:58:20 +0800
Subject: [PATCH] 8369 境界修改(升级境界给技能格式改为json字典)

---
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerAssist.py |  163 ++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 115 insertions(+), 48 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerAssist.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerAssist.py
index 80653c9..fba8e63 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerAssist.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerAssist.py
@@ -20,6 +20,7 @@
 import IpyGameDataPY
 import NetPackCommon
 import PyGameDataStruct
+import PlayerFBHelpBattle
 import ChPyNetSendPack
 import PlayerControl
 import PlayerFamily
@@ -176,17 +177,15 @@
         playerThanksList = thanksMgr.playerThanksDict[playerID]
         playerThanksList.append(dbData)
         
-    # 已经感谢的
-    else:
-        for assistPlayerID, assistPlayerInfo in dbData.AssistPlayerDict.items():
-            if "IsGet" in assistPlayerInfo:
-                # 已经接受感谢奖励的不再处理
-                continue
-            
-            if assistPlayerID not in thanksMgr.assistPlayerThanksDict:
-                thanksMgr.assistPlayerThanksDict[assistPlayerID] = []
-            assistPlayerThanksList = thanksMgr.assistPlayerThanksDict[assistPlayerID]
-            assistPlayerThanksList.append(dbData)
+    for assistPlayerID, assistPlayerInfo in dbData.AssistPlayerDict.items():
+        if "IsGet" in assistPlayerInfo:
+            # 已经接受感谢奖励的不再处理
+            continue
+        
+        if assistPlayerID not in thanksMgr.assistPlayerThanksDict:
+            thanksMgr.assistPlayerThanksDict[assistPlayerID] = []
+        assistPlayerThanksList = thanksMgr.assistPlayerThanksDict[assistPlayerID]
+        assistPlayerThanksList.append(dbData)
             
     return
 
@@ -230,7 +229,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")
@@ -336,13 +338,6 @@
     NetPackCommon.SendFakePack(assistPlayer, assistPack)
     return
 
-def SetPlayerStartAssistTeamFB(curPlayer, queryData):
-    ## 开始协助组队副本 - 玩家进入副本后才真正进入协助状态
-    
-    #mapID, lineID, tagPlayerID = queryData
-    
-    return
-
 def MapServer_PlayerAssistLogic(curPlayer, msgList, tick):
     ## 地图同步的协助信息逻辑处理
     
@@ -390,6 +385,11 @@
         __DoBossAssistOver(queryData)
         return
     
+    # 副本协助结束
+    elif queryType == "OnFBAssistOver":
+        __DoFBAssistOver(queryData)
+        return
+    
     ## -------------------------------------------------------------------------------------------
     
     # 请求协助组队副本
@@ -399,7 +399,18 @@
     
     # 开始协助组队副本
     elif queryType == "OnStartAssistTeamFB":
-        SetPlayerStartAssistTeamFB(curPlayer, queryData)
+        mapID, lineID, tagPlayerID = queryData
+        GameWorld.DebugLog("    开始协助副本: mapID=%s,lineID=%s,tagPlayerID=%s" % (mapID, lineID, tagPlayerID), playerID)
+        # 副本协助暂时只处理设置协助目标ID
+        PlayerControl.SetAssistTagPlayerID(curPlayer, tagPlayerID)
+        return
+    
+    # 取消协助组队副本
+    elif queryType == "OnCancelAssistTeamFB":
+        mapID, lineID, reason = queryData
+        GameWorld.DebugLog("    开始协助副本: mapID=%s,lineID=%s,reason=%s" % (mapID, lineID, reason), playerID)
+        # 副本协助暂时只处理设置协助目标ID
+        PlayerControl.SetAssistTagPlayerID(curPlayer, 0)
         return
     
     #QueryPlayerResult_PlayerAssist(curPlayer, queryType, queryData, result)
@@ -419,7 +430,7 @@
     familyID = curPlayer.GetFamilyID()
     if not familyID:
         return
-    mapID, lineID, npcID, objID = queryData
+    mapID, lineID, npcID, objID, npcLV = queryData
     
     playerID = curPlayer.GetPlayerID()
     
@@ -447,6 +458,14 @@
     PlayerFamily.SendFamilyFakePack(familyID, GetAssistInfoListPack([assistObj]))
     # 求助信息已发送,请等待盟友支援
     PlayerControl.NotifyCode(curPlayer, "AssistRequestOK")
+    
+    # 广播仙盟请求
+    requestCount = 1
+    if not addNewAssist:
+        requestCount = min(curPlayer.GetDictByKey("AssistBossRequestCount") + 1, 999)
+    curPlayer.SetDict("AssistBossRequestCount", requestCount)
+    notifyNum = (requestCount - 1) % 3
+    PlayerControl.FamilyNotify(familyID, "AssistBossRequest%s" % notifyNum, [curPlayer.GetName(), mapID, npcLV, npcID])
     return
 
 def __DoRequestAssistTeamFB(curPlayer, queryData):
@@ -484,6 +503,13 @@
     PlayerFamily.SendFamilyFakePack(familyID, GetAssistInfoListPack([assistObj]))
     # 求助信息已发送,请等待盟友支援
     PlayerControl.NotifyCode(curPlayer, "AssistRequestOK")
+    # 广播仙盟请求
+    requestCount = 1
+    if not addNewAssist:
+        requestCount = min(curPlayer.GetDictByKey("AssistFBRequestCount") + 1, 999)
+    curPlayer.SetDict("AssistFBRequestCount", requestCount)
+    notifyNum = (requestCount - 1) % 3
+    PlayerControl.FamilyNotify(familyID, "AssistFBRequest%s" % notifyNum, [curPlayer.GetName(), mapID])
     return
 
 def __AddNewAssist(assistMgr, curPlayer, mapID, lineID, npcID=0, objID=0, exData="", isSaveDB=0):
@@ -587,8 +613,6 @@
         if assistObj in playerAssistList:
             playerAssistList.remove(assistObj)
             
-    SyncFamilyClearAssist(familyID, assistGUID)
-    
     # 取消boss协助
     if assistType == AssistType_Boss:
         
@@ -609,6 +633,8 @@
         # 暂不需要处理
         pass
     
+    # 放最后    
+    SyncFamilyClearAssist(familyID, assistGUID)
     return
 
 def OnCancelPlayerAssist(cancelPlayer, cancelPlayerID, assistObj, reason, isGameServer, isNotify=True):
@@ -644,7 +670,14 @@
         assistObj.AssistPlayerIDList.remove(cancelPlayerID)
         
     if cancelPlayer:
+        isTagPlayerReason = reason.startswith("RequestPlayerCancel_")
         PlayerControl.SetAssistTagPlayerID(cancelPlayer, 0)
+        overPack = ChPyNetSendPack.tagGCAssistOver()
+        overPack.IsTagPlayerReason = isTagPlayerReason
+        overPack.Reason = reason[len("RequestPlayerCancel_"):] if isTagPlayerReason else reason 
+        overPack.ReasonLen = len(overPack.Reason)
+        overPack.AssistGUID = assistGUID
+        NetPackCommon.SendFakePack(cancelPlayer, overPack)
         
     # 取消boss协助
     if assistObj.AssistType == AssistType_Boss:
@@ -679,7 +712,7 @@
                 OnCancelPlayerRequestAssist(assistObj, "BossAssistOver", False)
                 break
                 
-    if not assistAwardResult:
+    if not assistAwardItemID or not assistAwardResult:
         return
     
     # 新增感谢数据
@@ -688,11 +721,33 @@
         curPlayer = playerMgr.FindPlayerByID(playerID)
         if not curPlayer:
             continue
-        __AddAssistThanks(curPlayer, assistAwardItemID, mapID, lineID, assistPlayerDict, npcID)
+        AddNewAssistThanks(curPlayer, assistAwardItemID, mapID, lineID, assistPlayerDict, npcID)
         
     return
 
-def __AddAssistThanks(curPlayer, itemID, mapID, lineID, assistPlayerDict, npcID=0, exData=""):
+def __DoFBAssistOver(queryData):
+    ## 副本协助结束
+    mapID, lineID, noAssistPlayerID, assistAwardItemID, assistPlayerDict = queryData
+    assistMgr = PyDataManager.GetPlayerAssistPyManager()
+    if noAssistPlayerID not in assistMgr.playerNoSaveDBAssistDict:
+        return
+    playerAssistList = assistMgr.playerNoSaveDBAssistDict[noAssistPlayerID]
+    for assistObj in playerAssistList:
+        if assistObj.MapID == mapID and assistObj.LineID == lineID:
+            OnCancelPlayerRequestAssist(assistObj, "FBAssistOver", False)
+            break
+        
+    if not assistAwardItemID or not assistPlayerDict:
+        return
+    
+    # 新增感谢数据
+    curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(noAssistPlayerID)
+    if curPlayer:
+        AddNewAssistThanks(curPlayer, assistAwardItemID, mapID, lineID, assistPlayerDict)
+        
+    return
+
+def AddNewAssistThanks(curPlayer, itemID, mapID, lineID, assistPlayerDict, npcID=0, exData=""):
     ## 添加协助感谢数据
     
     playerID = curPlayer.GetPlayerID()
@@ -718,7 +773,7 @@
     assistThanksMgr = PyDataManager.GetPlayerAssistThanksPyManager()
     OnInitAssistThanksData(assistThanksMgr, newThanks)
     
-    GameWorld.DebugLog("增加协助感谢: mapID=%s,lineID=%s,npcID=%s,exData=%s" % (mapID, lineID, npcID, exData), playerID)
+    GameWorld.DebugLog("增加协助感谢: itemID=%s,mapID=%s,lineID=%s,npcID=%s,exData=%s" % (itemID, mapID, lineID, npcID, exData), playerID)
     return
 
 #// B0 14 使用协助感谢礼盒 #tagCGUseAssistThanksGift
@@ -784,16 +839,12 @@
     queryData = [itemID]
     QueryPlayerResult_PlayerAssist(curPlayer, "UseAssistThanksGift", queryData)
     
-    # 加入协助玩家接收感谢列表
+    # 通知协助玩家可接收的感谢个数
     playerMgr = GameWorld.GetPlayerManager()
     for assistPlayerID in useThanks.AssistPlayerDict.keys():
-        if assistPlayerID not in assistThanksMgr.assistPlayerThanksDict:
-            assistThanksMgr.assistPlayerThanksDict[assistPlayerID] = []
-        assistPlayerThanksList = assistThanksMgr.assistPlayerThanksDict[assistPlayerID]
-        assistPlayerThanksList.append(useThanks)
         assistPlayer = playerMgr.FindPlayerByID(assistPlayerID)
         if assistPlayer:
-            SyncCanGetAssistThanksGiftCount(assistPlayer, len(assistPlayerThanksList))
+            SyncCanGetAssistThanksGiftCount(assistPlayer)
     return
 
 #// B0 15 接收协助感谢礼物 #tagCGGetAssistThanksGift
@@ -814,9 +865,14 @@
         GameWorld.ErrLog("玩家没有可接收感谢的协助感谢礼盒!", playerID)
         return
     assistPlayerThanksList = assistThanksMgr.assistPlayerThanksDict[playerID]
-    if not assistPlayerThanksList:
+    getThanks = None
+    for thanks in assistPlayerThanksList:
+        if thanks.ThanksState:
+            getThanks = thanks
+            break
+    if not getThanks:
+        GameWorld.ErrLog("找不到玩家可接收感谢的协助感谢礼盒!", playerID)
         return
-    getThanks = assistPlayerThanksList[0] # 默认接收第一个
     itemID = getThanks.ItemID
     ipyData = IpyGameDataPY.GetIpyGameData("AssistThanksGift", itemID)
     if not ipyData:
@@ -862,7 +918,7 @@
         if getThanks in assistThanksMgr.allAssistThanksList:
             assistThanksMgr.allAssistThanksList.remove(getThanks)
             
-    assistPlayerThanksList.pop(0) # 移除
+    assistPlayerThanksList.remove(getThanks) # 移除
     
     updateTodayGiftCount = todayGiftCount + 1
     # 更新当天该礼盒ID已领取次数
@@ -874,25 +930,36 @@
         assistPlayerInfoDict = thanks.AssistPlayerDict[playerID]
         assistPlayerInfoDict["TodayGiftCount"] = updateTodayGiftCount
         
-    SyncCanGetAssistThanksGiftCount(curPlayer, len(assistPlayerThanksList))
+    SyncCanGetAssistThanksGiftCount(curPlayer, True)
     
-    # 通知地图
     isCurDailyDate = getThanks.DailyDateStr == GameWorld.GetDailyDateStr()
+    
+    # 如果是镜像协助的,更新今日接收感谢礼盒次数
+    if isCurDailyDate:
+        if IpyGameDataPY.GetIpyGameDataNotLog("FBHelpBattle", getThanks.MapID, getThanks.LineID):
+            PlayerFBHelpBattle.UpdateGetThanksGiftCountDict(curPlayer, itemID, updateTodayGiftCount)
+            
+    # 通知地图
     queryData = [itemID, isExtraAward, isCurDailyDate, updateTodayGiftCount]
     QueryPlayerResult_PlayerAssist(curPlayer, "GetAssistThanksGift", queryData)
     return
 
-def SyncCanGetAssistThanksGiftCount(curPlayer, canGetCount=None):
+def SyncCanGetAssistThanksGiftCount(curPlayer, isForce=False):
     ## 通知可接收协助感谢礼物个数
-    if canGetCount == None:
-        playerID = curPlayer.GetPlayerID()
-        assistThanksMgr = PyDataManager.GetPlayerAssistThanksPyManager()
-        if playerID not in assistThanksMgr.assistPlayerThanksDict:
-            return
-        assistPlayerThanksList = assistThanksMgr.assistPlayerThanksDict[playerID]
-        if not assistPlayerThanksList:
-            return
-        canGetCount = len(assistPlayerThanksList)
+    
+    playerID = curPlayer.GetPlayerID()
+    assistThanksMgr = PyDataManager.GetPlayerAssistThanksPyManager()
+    if playerID not in assistThanksMgr.assistPlayerThanksDict:
+        return
+    assistPlayerThanksList = assistThanksMgr.assistPlayerThanksDict[playerID]
+    canGetCount = 0
+    for thanks in assistPlayerThanksList:
+        if thanks.ThanksState:
+            canGetCount += 1
+            
+    if not canGetCount and not isForce:
+        return
+    
     countPack = ChPyNetSendPack.tagGCCanGetAssistThanksGiftCount()
     countPack.CanGetCount = canGetCount
     NetPackCommon.SendFakePack(curPlayer, countPack)

--
Gitblit v1.8.0