ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldFamilyWar.py
@@ -223,7 +223,7 @@
        
    if familyWarRank:
        GameWorld.Log("解散仙盟,触发更新仙盟联赛排名: delFamilyID=%s,familyWarRank=%s" % (familyID, familyWarRank))
        PlayerFamily.UpdFamilyWarRank()
        UpdFamilyWarRank()
        
    # 补发未分配的连胜奖励
    AllotWinRewardBySystem(GetFamilyWarChampionRecData(), True)
@@ -294,7 +294,9 @@
    
    # 下周分组定级
    elif stateValue == FamilyWarState_NextWeekGroupRank:
        DoLogicFamilyWar_NextWeekGroupRank()
        pass
        #废弃该阶段逻辑,因为不再支持单次活动周期跨天,所以改为过天时触发检查一下即可
        #DoLogicFamilyWar_NextWeekGroupRank()
        
    else:
        GameWorld.ErrLog("不存在该仙盟联赛状态!stateValue=%s" % stateValue)
@@ -416,24 +418,29 @@
    familyMgr = GameWorld.GetFamilyManager()
    sortFamilyIDList = PlayerFamily.GetSortFamilyIDList()
    familyCount = len(sortFamilyIDList)
    joinFamilyLVLimit = IpyGameDataPY.GetFuncCfg("FamilyMatchSet", 1)
    GameWorld.DebugLog("最低参赛仙盟等级: %s" % joinFamilyLVLimit)
    for i, familyID in enumerate(sortFamilyIDList):
        family = familyMgr.FindFamily(familyID)
        if not family:
            GameWorld.ErrLog("仙盟联赛首轮分组时无法找到该仙盟: i=%s,familyID=%s" % (i, familyID))
            continue
        groupFamilyList.append(family)
        # 添加参赛仙盟及成员名单
        PyGameData.g_familyWarFamilyIDList.append(familyID)
        for index in xrange(family.GetCount()):
            curMember = family.GetAt(index)
            memPlayerID = curMember.GetPlayerID()
            memPlayer = curMember.GetPlayer()
            isAddOK = AddFamilyWarMem(memPlayerID, familyID, warMemRecList)
            lastJoinFamilyID = lastFamilyWarMemDict.get(memPlayerID, 0)
            # 重新通知玩家参与的仙盟
            if lastJoinFamilyID and isAddOK and lastJoinFamilyID != familyID and memPlayer:
                __NotifyPlayerJoinFamilyInfo(memPlayer, familyID)
        if family.GetLV() < joinFamilyLVLimit:
            GameWorld.Log("仙盟等级不足,无法参与联赛!familyID=%s,LV=%s,joinFamilyLVLimit=%s" % (familyID, family.GetLV(), joinFamilyLVLimit))
        else:
            groupFamilyList.append(family)
            # 添加参赛仙盟及成员名单
            PyGameData.g_familyWarFamilyIDList.append(familyID)
            for index in xrange(family.GetCount()):
                curMember = family.GetAt(index)
                memPlayerID = curMember.GetPlayerID()
                memPlayer = curMember.GetPlayer()
                isAddOK = AddFamilyWarMem(memPlayerID, familyID, warMemRecList)
                lastJoinFamilyID = lastFamilyWarMemDict.get(memPlayerID, 0)
                # 重新通知玩家参与的仙盟
                if lastJoinFamilyID and isAddOK and lastJoinFamilyID != familyID and memPlayer:
                    __NotifyPlayerJoinFamilyInfo(memPlayer, familyID)
                
        # 满一组仙盟数 or 没有仙盟了
        if len(groupFamilyList) == FamilyWar_GroupFamilyCount or i == familyCount - 1:
@@ -448,6 +455,8 @@
                
    GameWorld.Log("    PyGameData.g_familyWarFamilyIDList: %s" % PyGameData.g_familyWarFamilyIDList)
    GameWorld.Log("    PyGameData.g_familyWarMemDict: %s" % PyGameData.g_familyWarMemDict)
    GameWorld.Log("    通用记录对战家族数: %s" % warBatRecList.Count())
    GameWorld.Log("    通用记录参与玩家数: %s" % warMemRecList.Count())
    GameWorld.Log("    仙盟联赛首轮比赛分组确认完毕!")
    PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_Round, FamilyWarRound_First) # 设置已处理过的轮次
    return
@@ -720,6 +729,10 @@
        
    return
def DoOnDay():
    DoLogicFamilyWar_NextWeekGroupRank()
    return
def DoLogicFamilyWar_NextWeekGroupRank():
    ''' 下周分组定级
        最低级别组: 不设置联赛级别, 下周最低级别组名单由其他无联赛级别仙盟总战力排行得到
@@ -728,7 +741,35 @@
    # 这里补触发一次,防止总结算的时候服务器异常没有成功结算
    #     或 次轮没有比赛导致没有结算(次轮的仙盟都解散了才可能出现,一般不可能出现,可不考虑,如果真出现了,会在周六凌晨结算)
    __DoLogicFamilyWarAllOver()
    PlayerFamily.UpdFamilyWarRank()
    #UpdFamilyWarRank()
    return
def UpdFamilyWarRank():
    '''更新仙盟联赛排名
    注意:该逻辑在仙盟联赛周期中不可执行,仅在下周分组定级状态下可更新,由程序控制,在活动结束后结算调用
    仙盟联赛新一周期开始时、仙盟解散时 会触发该逻辑
    '''
    #gameWorld = GameWorld.GetGameWorld()
    #state = gameWorld.GetDictByKey(ShareDefine.Def_Notify_WorldKey_FBFuncState % ChConfig.Def_FBMapID_FamilyWar)
    #if state != GameWorldFamilyWar.FamilyWarState_NextWeekGroupRank:
    #    GameWorld.DebugLog("非下周分组定级阶段不可更新仙盟联赛排名!")
    #    return
    GameWorld.Log("=== 更新仙盟联赛排名 ===")
    familyMgr = GameWorld.GetFamilyManager()
    sortFamilyIDList = PlayerFamily.GetSortFamilyIDList()
    for rank, familyID in enumerate(sortFamilyIDList, 1):
        family = familyMgr.FindFamily(familyID)
        if not family:
            continue
        curRank = PlayerFamily.GetFamilyWarRank(family)
        if not curRank:
            break
        if curRank != rank:
            PlayerFamily.SetFamilyWarRank(family, rank)
            GameWorld.Log("    更新仙盟联赛仙盟排名: familyID=%s,curRank=%s,updRank=%s" % (family.GetID(), curRank, rank))
    return
def __DoLogicFamilyWarAllOver():
@@ -753,6 +794,10 @@
    warBatRecList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_FamilyWarBattle)
    if not warBatRecList.Count():
        GameWorld.Log("没有仙盟联赛比赛记录,不需要结算!")
        curRoundNum = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_Round)
        PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_Round, 0) # 重置对战轮次
        PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_AllOver, 1) # 设置已经处理过总结算
        GameWorld.Log("重置轮次信息,设置已结算!curRoundNum=%s" % curRoundNum)
        return
    for i in xrange(warBatRecList.Count()):
        recData = warBatRecList.At(i)
@@ -857,6 +902,8 @@
    
    PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_Round, 0) # 重置对战轮次
    PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_AllOver, 1) # 设置已经处理过总结算
    UpdFamilyWarRank() # 改为比赛结束后默认更新联赛排名
    return
def UpdFamilyWarChampion(championFamilyID):