ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/Championship.py
@@ -19,6 +19,7 @@
import CrossChampionship
import PlayerDBGSEvent
import ShareDefine
import time
#逻辑实现
@@ -44,6 +45,9 @@
        GameWorld.DebugAnswer(curPlayer, "如果没有指定ID则该组重新随机匹配")
        GameWorld.DebugAnswer(curPlayer, "命令需在对应的阶段设置才有效;")
        GameWorld.DebugAnswer(curPlayer, "重置活动数据需在非活动时间重置,不然可能导致活动状态异常")
        GameWorld.DebugAnswer(curPlayer, "虚拟结算排名: Championship 8 分区 第1名ID ...")
        GameWorld.DebugAnswer(curPlayer, "虚拟结算执行: Championship over")
        GameWorld.DebugAnswer(curPlayer, "注:虚拟结算的命令主要用于快速测试结算用,玩家ID不足则假人代替")
        
    else:
        value1 = gmList[0]
@@ -207,9 +211,59 @@
        CrossChampionship.Send_CrossServerMsg_ChampionshipGroup(groupMark)
        return
    
    if value1 == 8:
        __FackOverData(playerID, serverGroupID, gmList)
        return
    if value1 == "over":
        GameWorld.DebugAnswerCross(playerID, serverGroupID, "虚拟结算执行")
        CrossChampionship.DoCrossChampionshipFinalOver()
        return
    GameWorld.DebugAnswerCross(playerID, serverGroupID, "命令参数错误,详见命令说明")
    return
def __FackOverData(playerID, serverGroupID, gmList):
    ## 虚拟结算数据
    zoneID = gmList[1] if len(gmList) > 1 else 0
    rankPlayerIDList = gmList[2:]
    batPlayerCount = CrossChampionship.Def_CrossChampionshipPlayerWFCount
    # 先设置参赛玩家
    champMgr = CrossChampionship.GetChampionshipMgr()
    pkZoneMgr = champMgr.GetChampPKZoneMgr(zoneID, True)
    if len(rankPlayerIDList) < batPlayerCount:
        # 不足的机器人补足
        zonePlayerIDStar = zoneID * 100 + 1 # 确保每个分区的假人不重复
        rankPlayerIDList += range(zonePlayerIDStar, zonePlayerIDStar + (batPlayerCount - len(rankPlayerIDList)))
    pkZoneMgr.playerDict = {} # 清空玩家,重新设置
    CrossChampionship.Send_CrossServerMsg_ChampionshipPlayer(isSync=True, clearPlayer=True)
    for pID in rankPlayerIDList:
        batPlayer = CrossChampionship.ChampionshipBatPlayer()
        batPlayer.zoneID = zoneID
        batPlayer.playerID = pID
        pkZoneMgr.playerDict[pID] = batPlayer
    CrossChampionship.Send_CrossServerMsg_ChampionshipPlayer(isSync=True)
    # 虚拟战斗场次
    overTime = int(time.time())
    pkZoneMgr.battleInfo = {} # 清空对战记录
    battleIndexDict = {8:[[1, 5], [3, 7], [2, 6], [4, 8]], 4:[[1, 3], [5, 7], [2, 4], [6, 8]], 2:[[1, 2], [3, 4], [5, 6], [7, 8]]}
    for groupMark in [8, 4, 2]:
        battleList = battleIndexDict[groupMark]
        for battleNum in range(1, 1 + len(battleList)):
            battleRankInfo = battleList[battleNum - 1]
            battle = CrossChampionship.ChampionshipBattle()
            battle.overTime = overTime
            battle.zoneID = zoneID
            battle.groupMark = groupMark
            battle.battleNum = battleNum
            battle.playerIDA = rankPlayerIDList[battleRankInfo[0] - 1]
            battle.playerIDB = rankPlayerIDList[battleRankInfo[1] - 1]
            battle.winPlayerID = battle.playerIDA
            pkZoneMgr.AddBattle(groupMark, battleNum, battle)
        CrossChampionship.Send_CrossServerMsg_ChampionshipGroup(groupMark)
    GameWorld.DebugAnswerCross(playerID, serverGroupID, "虚拟结算排名:分区%s,%s" % (zoneID, rankPlayerIDList))
    return
def __PrintChampionshipInfo():
    GameWorld.Log("================ 跨服排位当前信息 ==================")
    ID = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_CrossChampionshipID)