From 9a60fccaf9365a2a92f52835866d595ba14c575b Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 20 六月 2024 21:13:46 +0800
Subject: [PATCH] 10185 【越南】【港台】【主干】BOSS凭证修改

---
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActBossTrial.py |  472 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 465 insertions(+), 7 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActBossTrial.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActBossTrial.py
index cd21cb0..b97f0b2 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActBossTrial.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActBossTrial.py
@@ -21,27 +21,41 @@
 import PlayerBillboard
 import IpyGameDataPY
 import GameWorld
-
-BillboardType = ShareDefine.Def_BT_BossTrialSubmit
+import CrossRealmMsg
+import CrossActionControl
+import CrossBillboard
+import PlayerFamily
+import PyDataManager
 
 def OnActStart(actNum):
     ## 活动开启
-    PlayerBillboard.ClearBillboardByIndex(BillboardType)
+    PlayerBillboard.ClearBillboardByIndex(ShareDefine.Def_BT_BossTrialSubmit)
+    PlayerBillboard.ClearBillboardByIndex(ShareDefine.Def_BT_BossTrialSubmitFamily)
+    
+    familyActionMgr = GameWorld.GetFamilyActionManager()
+    familyManager = GameWorld.GetFamilyManager()
+    for i in range(0, familyManager.GetCount()):
+        family = familyManager.GetAt(i)
+        familyID = family.GetID()
+        familyActionMgr.DelFamilyAction(familyID, ShareDefine.Def_ActionType_BossTrialSubmit)
+        
     return
 
 def OnActEnd(actNum, ipyData, dayIndex):
     ## 活动结束
+    OnGiveFamilyOrderAwawrd(actNum, ipyData, dayIndex)
     cfgID = ipyData.GetCfgID() if ipyData else 0
     # 发放排行奖励
-    GameWorld.Log("=== boss历练活动结束!发放榜单奖励! === actNum=%s,cfgID=%s,dayIndex=%s" % (actNum, cfgID, dayIndex))
+    GameWorld.Log("=== boss历练活动结束!发放本服个人榜单奖励! === actNum=%s,cfgID=%s,dayIndex=%s" % (actNum, cfgID, dayIndex))
     if not cfgID:
         return
+    BillboardType = ShareDefine.Def_BT_BossTrialSubmit
     billBoard = GameWorld.GetBillboard().FindBillboard(BillboardType)
     if not billBoard:
         return
-    mailKey = ipyData.GetMailKey()
     templateID = GameWorld.GetTemplateID(ipyData, cfgID, dayIndex)
     if not templateID:
+        GameWorld.Log("本次活动没有个人榜奖励!")
         return
     tempIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActBossTrialTemplate", templateID)
     if not tempIpyDataList:
@@ -68,13 +82,457 @@
         name2 = billBoardData.GetName2()
         cmpValue = billBoardData.GetCmpValue()
         
-        GameWorld.Log("    发放boss历练榜单奖励: rank=%s,playerID=%s,cmpValue=%s,awardItemList=%s, %s" 
+        GameWorld.Log("    发放boss历练个人榜单奖励: rank=%s,playerID=%s,cmpValue=%s,awardItemList=%s, %s" 
                       % (rank, playerID, cmpValue, awardItemList, name2))
         
-        PlayerCompensation.SendMailByKey(mailKey, [playerID], awardItemList, [rank])
+        PlayerCompensation.SendMailByKey("BossTrialMail10", [playerID], awardItemList, [rank])
         
     DataRecordPack.DR_BillboardData(BillboardType, "BossTrial", {"actNum":actNum, "cfgID":cfgID, "dayIndex":dayIndex, "templateID":templateID})
     PlayerBillboard.CopyBillboard(ShareDefine.Def_BT_BossTrialSubmitBak, BillboardType)
     PlayerBillboard.ClearBillboardByIndex(BillboardType)
     GameWorld.Log("=================================================================================")
     return
+
+def OnGiveFamilyOrderAwawrd(actNum, ipyData, dayIndex):
+    cfgID = ipyData.GetCfgID() if ipyData else 0
+    # 发放排行奖励
+    GameWorld.Log("=== boss历练活动结束!发放本服仙盟榜单奖励! === actNum=%s,cfgID=%s,dayIndex=%s" % (actNum, cfgID, dayIndex))
+    if not cfgID:
+        return
+    BillboardType = ShareDefine.Def_BT_BossTrialSubmitFamily
+    billBoard = GameWorld.GetBillboard().FindBillboard(BillboardType)
+    if not billBoard:
+        return
+    templateIDList = ipyData.GetFamilyTemplateIDList()
+    templateID = templateIDList[-1] if dayIndex >= len(templateIDList) else templateIDList[dayIndex]
+    if not templateID:
+        GameWorld.Log("本次活动没有仙盟榜奖励!")
+        return
+    tempIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActBossTrialTemplate", templateID)
+    if not tempIpyDataList:
+        return
+    
+    rankAwardDict = {}
+    for tempIpyData in tempIpyDataList:
+        rankAwardDict[tempIpyData.GetRank()] = [tempIpyData.GetAwardItemList(), tempIpyData.GetMemAwardItemList()]
+        
+    GameWorld.Log("    templateID=%s,rankAwardDict=%s" % (templateID, rankAwardDict))
+    billBoard.Sort()
+    
+    familyManager = GameWorld.GetFamilyManager()
+    for index in xrange(billBoard.GetCount()):
+        billBoardData = billBoard.At(index)
+        if not billBoardData:
+            continue
+        
+        familyRank = index + 1
+        awardInfo = GameWorld.GetOrderValueByDict(rankAwardDict, familyRank, False)
+        if not awardInfo:
+            break
+        leaderAwardItemList, memAwardItemList = awardInfo
+                
+        familyID = billBoardData.GetID()
+        cmpValue = billBoardData.GetCmpValue()
+        
+        family = familyManager.FindFamily(familyID)
+        if not family:
+            continue
+        
+        familyActionData = GetFamilyBossTrialSubmitActionData(familyID, False)
+        if not familyActionData:
+            continue
+        awardState = GetFamilyAwardState(familyActionData)
+        awardIndex = 0 # 本服奖励状态索引
+        if awardState&pow(2, awardIndex):
+            GameWorld.ErrLog("该仙盟本服榜奖励已发放! familyID=%s" % familyID)
+            continue
+        updAwardState = awardState|pow(2, awardIndex)
+        SetFamilyAwardState(familyActionData, updAwardState)
+        
+        memSubCountDict = GetFamilyMemSubCountDict(familyActionData)
+        
+        leaderID = family.GetLeaderID()
+        awardMemIDList = []
+        for index in xrange(family.GetCount()):
+            member = family.GetAt(index)
+            memPlayerID = member.GetPlayerID()
+            if memPlayerID == leaderID:
+                continue
+            awardMemIDList.append(memPlayerID)
+            
+        paramList = [familyRank]
+        if not leaderAwardItemList:
+            awardMemIDList.append(leaderID)
+        else:
+            PlayerCompensation.SendMailByKey("BossTrialFamilyLeader", [leaderID], leaderAwardItemList, paramList)
+            
+        PlayerCompensation.SendMailByKey("BossTrialFamilyMember", awardMemIDList, memAwardItemList, paramList)
+        GameWorld.Log("发放boss历练活动仙盟榜单奖励本服: familyID=%s,名次=%s,总提交个数=%s,updAwardState=%s,awardMemIDList=%s,memSubCountDict=%s" 
+                      % (familyID, familyRank, cmpValue, updAwardState, awardMemIDList, memSubCountDict))
+        
+    DataRecordPack.DR_BillboardData(BillboardType, "BossTrial", {"actNum":actNum, "cfgID":cfgID, "dayIndex":dayIndex, "templateID":templateID})
+    PlayerBillboard.CopyBillboard(ShareDefine.Def_BT_BossTrialSubmitFamilyBak, BillboardType)
+    PlayerBillboard.ClearBillboardByIndex(BillboardType)
+    GameWorld.Log("=================================================================================")
+    return
+
+def MapServer_BossTrial(curPlayer, msgList):
+    mapID = curPlayer.GetRealMapID()
+    playerID = curPlayer.GetPlayerID()
+    GameWorld.DebugLog("MapServer_BossTrial mapID=%s,msgList=%s" % (mapID, msgList), playerID)
+    if not msgList:
+        return
+    
+    msgType, dataMsg = msgList
+    ret = None
+    
+    if msgType == "BossTrialSubmit":
+        ret = __OnBossTrialSubmit(curPlayer, dataMsg)
+        
+    if ret == None:
+        return
+    return msgList + (ret if isinstance(ret, list) else [ret])
+
+def __OnBossTrialSubmit(curPlayer, dataMsg):
+    ## 地图提交boss凭证
+    playerID = curPlayer.GetPlayerID()
+    accID = curPlayer.GetAccID()
+    playerName = curPlayer.GetName()
+    job = curPlayer.GetJob()
+    realmLV = curPlayer.GetOfficialRank()
+    familyID = curPlayer.GetFamilyID()
+    submitCount, updSubmitCount = dataMsg
+    
+    curFamily, familySubmitTotal = __DoBossTrialSubmitFamilyAction(curPlayer, submitCount)
+    familyBillInfo = {}
+    
+    #更新本服仙盟提交榜单
+    if familyID and curFamily and familySubmitTotal:
+        familyBillInfo = PlayerFamily.GetFamilyBillboardInfo(curFamily)
+        familyBillInfo["familySubmitTotal"] = familySubmitTotal
+        PlayerBillboard.UpdateFamilyBillboard(ShareDefine.Def_BT_BossTrialSubmitFamily, familyBillInfo, familySubmitTotal)
+        
+    #同步跨服
+    playerInfo = {"playerID":playerID, "playerName":playerName, "accID":accID, "job":job, "realmLV":realmLV,
+                  "playerSubmitTotal":updSubmitCount}
+    SyncBossTrialSubmitToCrossServer(curPlayer, playerInfo, familyBillInfo)
+    return
+
+def __DoBossTrialSubmitFamilyAction(curPlayer, submitCount):
+    ## 执行提交凭证到仙盟Action数据
+    
+    curFamily = None
+    familySubmitTotal = 0
+    playerID = curPlayer.GetPlayerID()
+    familyID = curPlayer.GetFamilyID()
+    if not familyID:
+        return curFamily, familySubmitTotal
+    
+    familyManager = GameWorld.GetFamilyManager()
+    curFamily = familyManager.FindFamily(familyID)
+    if not curFamily:
+        return curFamily, familySubmitTotal
+    
+    familyActionData = GetFamilyBossTrialSubmitActionData(familyID, True)
+    
+    familySubmitTotal = GetFamilySubmitTotal(familyActionData) + submitCount
+    SetFamilySubmitTotal(familyActionData, familySubmitTotal)
+    
+    memSubCountDict = GetFamilyMemSubCountDict(familyActionData)
+    memSubCountDict[playerID] = memSubCountDict.get(playerID, 0) + submitCount
+    SetFamilyMemSubCountDict(familyActionData, memSubCountDict)
+    
+    return curFamily, familySubmitTotal
+
+def GetFamilyBossTrialSubmitActionData(familyID, isAdd=False):
+    ## 获取仙盟boss凭证提交
+    familyActionObj = None
+    actionType = ShareDefine.Def_ActionType_BossTrialSubmit
+    familyAction = GameWorld.GetFamilyActionManager().GetFamilyAction(familyID, actionType)
+    if not familyAction.Count():
+        if isAdd:
+            familyActionObj = familyAction.AddAction()
+            familyActionObj.SetFamilyId(familyID)
+            familyActionObj.SetActionType(actionType)
+    else:
+        familyActionObj = familyAction.At(0)
+        
+    return familyActionObj
+
+def GetFamilySubmitTotalByID(familyID):
+    ## 获取仙盟提交的凭证总数
+    familyActionData = GetFamilyBossTrialSubmitActionData(familyID, False)
+    if not familyActionData:
+        return 0
+    return GetFamilySubmitTotal(familyActionData)
+
+def GetFamilySubmitTotal(familyActionData): return familyActionData.GetValue1()
+def SetFamilySubmitTotal(familyActionData, submitTotal): familyActionData.SetValue1(submitTotal)
+def GetFamilyAwardState(familyActionData): return familyActionData.GetValue2()
+def SetFamilyAwardState(familyActionData, state): return familyActionData.SetValue2(state)
+
+def GetFamilyMemSubCountDict(familyActionData):
+    memSubCountDict = {}
+    useData = familyActionData.GetUseData()
+    if useData:
+        try:
+            memSubCountDict = eval(useData)
+        except:
+            memSubCountDict = {}
+    return memSubCountDict
+def SetFamilyMemSubCountDict(familyActionData, memSubCountDict):
+    useData = str(memSubCountDict).replace(" ", "")
+    familyActionData.SetUseData(useData, len(useData))
+    return
+
+def SyncBossTrialSubmitToCrossServer(curPlayer, playerInfo, familyInfo):
+    ## 同步boss凭证提交总数到跨服服务器
+    actInfo = CrossActionControl.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_BossTrial)
+    if not actInfo.get(ShareDefine.ActKey_State):
+        return
+    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
+    ipyDataDict = actInfo.get(ShareDefine.ActKey_IpyDataInfo, {})
+    if not ipyDataDict:
+        return
+    zoneID = ipyDataDict.get("ZoneID")
+    if not cfgID or not zoneID:
+        return
+    
+    dataMsg = {"cfgID":cfgID, "zoneID":zoneID, "playerInfo":playerInfo, "familyInfo":familyInfo}
+    CrossRealmMsg.SendMsgToCrossServer(ShareDefine.ClientServerMsg_BossTrialSubmit, dataMsg)
+    return
+
+def CrossServerMsg_CrossBossTrialFamilyAward(msgData):
+    ## 收到跨服通知  - 结算跨服仙盟榜奖励
+    cfgID = msgData["cfgID"]
+    zoneID = msgData["zoneID"]
+    templateID = msgData["templateID"]
+    awardFamilyList = msgData["awardFamilyList"]
+    
+    GameWorld.Log("收到跨服同步的结算boss历练活动跨服仙盟榜奖励: cfgID=%s,zoneID=%s,templateID=%s" % (cfgID, zoneID, templateID))
+    
+    familyManager = GameWorld.GetFamilyManager()
+    
+    for familyInfo in awardFamilyList:
+        familyID, familyRank, familySubmitTotal, leaderAwardItemList, memAwardItemList = familyInfo
+        family = familyManager.FindFamily(familyID)
+        if not family:
+            GameWorld.DebugLog("非本服仙盟或已解散! familyID=%s" % familyID)
+            continue
+        
+        familyActionData = GetFamilyBossTrialSubmitActionData(familyID, False)
+        if not familyActionData:
+            continue
+        awardState = GetFamilyAwardState(familyActionData)
+        awardIndex = 1 #跨服奖励状态索引
+        if awardState&pow(2, awardIndex):
+            GameWorld.ErrLog("该仙盟跨服榜奖励已发放! familyID=%s" % familyID)
+            continue
+        updAwardState = awardState|pow(2, awardIndex)
+        SetFamilyAwardState(familyActionData, updAwardState)
+        
+        memSubCountDict = GetFamilyMemSubCountDict(familyActionData)
+        
+        leaderID = family.GetLeaderID()
+        awardMemIDList = []
+        for index in xrange(family.GetCount()):
+            member = family.GetAt(index)
+            memPlayerID = member.GetPlayerID()
+            if memPlayerID == leaderID:
+                continue
+            awardMemIDList.append(memPlayerID)
+            
+        paramList = [familyRank]
+        if not leaderAwardItemList:
+            awardMemIDList.append(leaderID)
+        else:
+            PlayerCompensation.SendMailByKey("BossTrialCrossFamilyLeader", [leaderID], leaderAwardItemList, paramList)
+            
+        PlayerCompensation.SendMailByKey("BossTrialCrossFamilyMember", awardMemIDList, memAwardItemList, paramList)
+        GameWorld.Log("发放boss历练活动仙盟榜单奖励跨服: familyID=%s,名次=%s,总提交个数=%s,updAwardState=%s,awardMemIDList=%s,memSubCountDict=%s" 
+                      % (familyID, familyRank, familySubmitTotal, updAwardState, awardMemIDList, memSubCountDict))
+        
+    return
+
+##------------------------------------------ 跨服boss历练活动 ---------------------------------------
+
+def ClientServerMsg_BossTrialSubmit(serverGroupID, msgData):
+    ## 收到子服 - 提交boss凭证
+    
+    cfgID = msgData["cfgID"]
+    zoneID = msgData["zoneID"]
+    playerInfo = msgData["playerInfo"]
+    familyInfo = msgData["familyInfo"]
+    
+    actInfo = CrossActionControl.GetCrossActInfoByCfgID(ShareDefine.CrossActName_BossTrial, cfgID, zoneID)
+    if not actInfo or not actInfo[ShareDefine.ActKey_State]:
+        GameWorld.ErrLog("跨服boss历练非活动中,无法提交! cfgID=%s, zoneID=%s" % (cfgID, zoneID))
+        return
+    if not actInfo[ShareDefine.ActKey_StateJoin]:
+        GameWorld.ErrLog("跨服boss历练非可参与状态,无法提交! cfgID=%s, zoneID=%s" % (cfgID, zoneID))
+        return
+    ipyData = IpyGameDataPY.GetIpyGameData("CrossActBossTrial", cfgID)
+    if not ipyData:
+        return
+    personlLimit, familyLimit = ipyData.GetRankLimitList()
+    
+    playerID = playerInfo["playerID"]
+    playerName = playerInfo["playerName"]
+    job = playerInfo["job"]
+    accID = playerInfo["accID"]
+    realmLV = playerInfo["realmLV"]
+    playerSubmitTotal = playerInfo["playerSubmitTotal"]
+    
+    groupValue1 = zoneID
+    
+    if playerSubmitTotal >= personlLimit:
+        name2, type2, value1, value2 = accID, job, realmLV, 0
+        CrossBillboard.UpdCrossBillboard(ShareDefine.Def_CBT_BossTrialSubmit, groupValue1, playerID, playerName, 
+                                         name2, type2, value1, value2, playerSubmitTotal)
+        
+    if familyInfo and familyInfo.get("familySubmitTotal", 0) >= familyLimit:
+        familySubmitTotal = familyInfo["familySubmitTotal"]
+        CrossBillboard.UpdCrossBillboardFamily(ShareDefine.Def_CBT_BossTrialSubmitFamily, groupValue1, familyInfo, familySubmitTotal)
+        
+    return
+
+def OnCrossActIDChange(cfgID, state):
+    ## 活动ID变更
+    
+    # 先结算活动
+    zoneID = 0
+    ipyData = IpyGameDataPY.GetIpyGameData("CrossActBossTrial", cfgID)
+    if ipyData:
+        zoneID = ipyData.GetZoneID()
+        
+        PersonalTemplateID = ipyData.GetPersonalTemplateID()
+        FamilyTemplateID = ipyData.GetFamilyTemplateID()
+        
+        if PersonalTemplateID:
+            __GiveCrossOrderAwardPersonal(cfgID, zoneID, PersonalTemplateID)
+            
+        if FamilyTemplateID:
+            __GiveCrossOrderAwardFamily(cfgID, zoneID, FamilyTemplateID)
+            
+    # 如果有新活动,处理新活动
+    if not state:
+        return
+    
+    if zoneID:
+        groupValue1 = zoneID
+        billboardMgr = PyDataManager.GetCrossBillboardManager()
+        billboardObj = billboardMgr.GetCrossBillboard(ShareDefine.Def_CBT_BossTrialSubmit, groupValue1)
+        billboardObj.ClearData() # 新活动重置榜单数据
+        
+        billboardObj = billboardMgr.GetCrossBillboard(ShareDefine.Def_CBT_BossTrialSubmitFamily, groupValue1)
+        billboardObj.ClearData() # 新活动重置榜单数据
+        
+    return
+    
+def __GiveCrossOrderAwardPersonal(cfgID, zoneID, templateID):
+    
+    groupValue1 = zoneID
+    billboardType = ShareDefine.Def_CBT_BossTrialSubmit
+    billboardMgr = PyDataManager.GetCrossBillboardManager()
+    billboardObj = billboardMgr.GetCrossBillboard(billboardType, groupValue1)
+    billboardDataCount = billboardObj.GetCount()
+    if not billboardDataCount:
+        GameWorld.Log("跨服Boss凭证个人排行数据为空! billboardType=%s,cfgID=%s,zoneID=%s,templateID=%s" % (billboardType, cfgID, zoneID, templateID))
+        return
+    
+    # 结算时排序并保存榜单数据流向
+    billboardObj.SortData()
+    
+    GameWorld.Log("结算跨服Boss凭证个人排行奖励: billboardType=%s,cfgID=%s,zoneID=%s,templateID=%s,billboardDataCount=%s" 
+                  % (billboardType, cfgID, zoneID, templateID, billboardDataCount))
+    
+    orderIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActBossTrialTemplate", templateID)
+    if not orderIpyDataList:
+        return
+    
+    rankPre = 0
+    billboardIndex = 0
+    for ipyData in orderIpyDataList:
+        rank = ipyData.GetRank()
+        awardItemList = ipyData.GetAwardItemList()
+        orderCountTotal = rank - rankPre # 奖励名次数量
+        rankPre = rank
+        orderCount = 0
+        
+        for index in xrange(billboardIndex, billboardDataCount):
+            if orderCount >= orderCountTotal:
+                break
+            
+            billboardData = billboardObj.At(index)
+            playerID = billboardData.ID
+            name2 = billboardData.Name2
+            cmpValue = billboardData.CmpValue
+            
+            playerRank = index + 1
+            GameWorld.Log("    发放boss历练个人榜单奖励: rank=%s,playerID=%s,cmpValue=%s,awardItemList=%s, %s" 
+                          % (rank, playerID, cmpValue, awardItemList, name2))
+            PlayerCompensation.SendMailByKey("BossTrialCrossPlayer", [playerID], awardItemList, [playerRank], crossMail=True)
+            
+            orderCount += 1
+            billboardIndex += 1
+            
+    # 结算完备份、清除榜单数据
+    CrossBillboard.CopyBillboard(billboardType, ShareDefine.Def_CBT_BossTrialSubmitBak)
+    billboardObj.ClearData()
+    return
+
+def __GiveCrossOrderAwardFamily(cfgID, zoneID, templateID):
+    
+    groupValue1 = zoneID
+    billboardType = ShareDefine.Def_CBT_BossTrialSubmitFamily
+    billboardMgr = PyDataManager.GetCrossBillboardManager()
+    billboardObj = billboardMgr.GetCrossBillboard(billboardType, groupValue1)
+    billboardDataCount = billboardObj.GetCount()
+    if not billboardDataCount:
+        GameWorld.Log("跨服Boss凭证仙盟排行数据为空! billboardType=%s,cfgID=%s,zoneID=%s,templateID=%s" % (billboardType, cfgID, zoneID, templateID))
+        return
+    
+    # 结算时排序并保存榜单数据流向
+    billboardObj.SortData()
+    
+    GameWorld.Log("结算跨服Boss凭证仙盟排行奖励: billboardType=%s,cfgID=%s,zoneID=%s,templateID=%s,billboardDataCount=%s" 
+                  % (billboardType, cfgID, zoneID, templateID, billboardDataCount))
+    
+    orderIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActBossTrialTemplate", templateID)
+    if not orderIpyDataList:
+        return
+    
+    awardFamilyList = []
+    rankPre = 0
+    billboardIndex = 0
+    for ipyData in orderIpyDataList:
+        rank = ipyData.GetRank()
+        leaderAwardItemList = ipyData.GetAwardItemList()
+        memAwardItemList = ipyData.GetMemAwardItemList()
+        orderCountTotal = rank - rankPre # 奖励名次数量
+        rankPre = rank
+        orderCount = 0
+        
+        for index in xrange(billboardIndex, billboardDataCount):
+            if orderCount >= orderCountTotal:
+                break
+            
+            billboardData = billboardObj.At(index)
+            familyID = billboardData.ID
+            familySubmitTotal = billboardData.CmpValue
+            
+            familyRank = index + 1
+            GameWorld.Log("    familyID=%s,名次=%s,总提交个数=%s" % (familyID, familyRank, familySubmitTotal))
+            awardFamilyList.append([familyID, familyRank, familySubmitTotal, leaderAwardItemList, memAwardItemList])
+            orderCount += 1
+            billboardIndex += 1
+            
+    # 广播子服发放奖励
+    sendMsg = {"cfgID":cfgID, "zoneID":zoneID, "templateID":templateID, "awardFamilyList":awardFamilyList}
+    CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_CrossBossTrialFamilyAward, sendMsg)
+    
+    # 结算完备份、清除榜单数据
+    CrossBillboard.CopyBillboard(billboardType, ShareDefine.Def_CBT_BossTrialSubmitFamilyBak)
+    billboardObj.ClearData()
+    return
+

--
Gitblit v1.8.0