#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#-------------------------------------------------------------------------------  
 | 
#  
 | 
##@package GM.Commands.Championship  
 | 
#  
 | 
# @todo:¿ç·þÅÅλÕù°ÔÈü  
 | 
# @author hxp  
 | 
# @date 2022-09-21  
 | 
# @version 1.0  
 | 
#  
 | 
# ÏêϸÃèÊö: ¿ç·þÅÅλÕù°ÔÈü  
 | 
#  
 | 
#-------------------------------------------------------------------------------  
 | 
#"""Version = 2022-09-21 21:30"""  
 | 
#-------------------------------------------------------------------------------  
 | 
  
 | 
import GameWorld  
 | 
import CrossChampionship  
 | 
import PlayerDBGSEvent  
 | 
import ShareDefine  
 | 
import time  
 | 
  
 | 
  
 | 
#Â߼ʵÏÖ  
 | 
## Ö´ÐÐÂß¼  
 | 
#  @param curPlayer µ±Ç°Íæ¼Ò  
 | 
#  @param gmList [cmdIndex gmAccID msg]  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def OnExec(curPlayer, gmList):  
 | 
    ## ±¾·þ´¦Àí  
 | 
    GameWorld.DebugAnswer(curPlayer, "----------------------------")  
 | 
    if not gmList:  
 | 
        champMgr = CrossChampionship.GetChampionshipMgr()  
 | 
        ID = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_CrossChampionshipID)  
 | 
        State = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_CrossChampionshipState)  
 | 
        GameWorld.DebugAnswer(curPlayer, "¿ç·þÅÅλÕù°Ô£ºID:%s,State:%s,%s" % (ID, State, champMgr.GetChampPKZoneIDList()))  
 | 
        GameWorld.DebugAnswer(curPlayer, "ÖØÖûÊý¾Ý: Championship 0 ÊÇ·ñÖØÖÃÏɹÙ")  
 | 
        GameWorld.DebugAnswer(curPlayer, "Êä³ö»î¶¯Êý¾Ý: Championship print")  
 | 
        GameWorld.DebugAnswer(curPlayer, "ÉèÖòÎÈüÍæ¼Ò: Championship 80 ·ÖÇø ÈËÊý Íæ¼ÒID1 ...")  
 | 
        GameWorld.DebugAnswer(curPlayer, "ÈËÊý×î´ó64£¬²»×ãÔò¿ÉÄÜÓÐÂÖ¿ÕµÄ×飬ָ¶¨Íæ¼ÒID²»×ãÈËÊýÔòÒÔ¼ÙÈË´úÌæ")  
 | 
        GameWorld.DebugAnswer(curPlayer, "Ö¸¶¨Íæ¼Ò·Ö×é: Championship ·Ö×é״̬ ·ÖÇøID Íæ¼ÒID1 ID2 ...")  
 | 
        GameWorld.DebugAnswer(curPlayer, "·Ö×é״̬:641-64Ç¿£»321-32Ç¿£»161-16Ç¿£»81-8Ç¿£»ID1ID2Á½Á½·ÖÔÚÒ»×é")  
 | 
        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]  
 | 
          
 | 
        if value1 == "print":  
 | 
            __PrintChampionshipInfo()  
 | 
            return  
 | 
          
 | 
    return  
 | 
  
 | 
def OnGetMergeParam(curPlayer):  
 | 
    playerID = curPlayer.GetPlayerID()  
 | 
    serverGroupID = GameWorld.GetServerGroupID()  
 | 
    return [serverGroupID, playerID]  
 | 
  
 | 
def OnMergeServerExec(gmList, tick):  
 | 
    ## ¿ç·þ´¦Àí  
 | 
      
 | 
    serverGroupID = gmList[-2]  
 | 
    playerID = gmList[-1]  
 | 
      
 | 
    gmList = gmList[:-2]  
 | 
    if not gmList:  
 | 
        return  
 | 
      
 | 
    value1 = gmList[0]  
 | 
      
 | 
    if value1 == "print":  
 | 
        __PrintChampionshipInfo()  
 | 
        GameWorld.DebugAnswerCross(playerID, serverGroupID, "Êä³öÍê±Ï£¬Çë²é¿´¿ç·þGameServerÈÕÖ¾")  
 | 
        return  
 | 
      
 | 
    state = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_CrossChampionshipState)  
 | 
    champMgr = CrossChampionship.GetChampionshipMgr()  
 | 
    #pkZoneIDList = champMgr.GetChampPKZoneIDList()  
 | 
    if value1 == 0:  
 | 
        if state in ShareDefine.CrossChampionshipStateList and state != ShareDefine.CrossChampionshipStateList[0]:  
 | 
            GameWorld.DebugAnswerCross(playerID, serverGroupID, "ÖØÖÃÊý¾ÝÐèÔڷǻÖлò64Ç¿·Ö×éǰ")  
 | 
            return  
 | 
          
 | 
        isResetOfficial = gmList[1] if len(gmList) > 1 else 0  
 | 
          
 | 
        PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_CrossChampionshipID, 0)  
 | 
        PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_CrossChampionshipState, 0)  
 | 
        PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_CrossChampionshipStateError, 0)  
 | 
        PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_CrossChampionshipErrorDo, 0)  
 | 
          
 | 
        champMgr.ClearPKZone()  
 | 
        if isResetOfficial:  
 | 
            champMgr.ClearOfficialZone()  
 | 
              
 | 
        GameWorld.DebugAnswerCross(playerID, serverGroupID, "ÖØÖÃÊý¾Ý³É¹¦")  
 | 
          
 | 
        CrossChampionship.Sync_CrossChampionshipDataToClientServer()  
 | 
        CrossChampionship.OnMinuteProcess()  
 | 
        return  
 | 
      
 | 
    stateError = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_CrossChampionshipStateError)  
 | 
    if stateError:  
 | 
        GameWorld.DebugAnswerCross(playerID, serverGroupID, "»î¶¯Êý¾Ý״̬˳ÐòÒѾÒì³££¬ÎÞ·¨´¦Àí")  
 | 
        return  
 | 
      
 | 
    if value1 in ShareDefine.CrossChampionshipStateList:  
 | 
        if state != value1:  
 | 
            GameWorld.DebugAnswerCross(playerID, serverGroupID, "·Ç¶ÔÓ¦»î¶¯×´Ì¬ÖУ¬ÎÞ·¨ÉèÖ㬵±Ç°×´Ì¬%s" % state)  
 | 
            return  
 | 
          
 | 
    maxPlayerCount = CrossChampionship.Def_CrossChampionshipPlayerMax  
 | 
    # ÉèÖòÎÈüÍæ¼Ò  
 | 
    if value1 == ShareDefine.CrossChampionshipState_Guess8:  
 | 
        if len(gmList) < 3:  
 | 
            GameWorld.DebugAnswerCross(playerID, serverGroupID, "²ÎÊý´íÎó£¬Ïê¼ûÃüÁî˵Ã÷")  
 | 
            return  
 | 
        zoneID = gmList[1]  
 | 
        batPlayerCount = min(maxPlayerCount, gmList[2])  
 | 
        setPlayerIDList = gmList[3:]  
 | 
        pkZoneMgr = champMgr.GetChampPKZoneMgr(zoneID)  
 | 
        if not pkZoneMgr:  
 | 
            GameWorld.DebugAnswerCross(playerID, serverGroupID, "²»´æÔڸ÷ÖÇø!zoneID=%s" % zoneID)  
 | 
            return  
 | 
        if len(setPlayerIDList) < batPlayerCount:  
 | 
            # ²»×ãµÄ»úÆ÷È˲¹×ã  
 | 
            setPlayerIDList += range(1001, 1001 + (batPlayerCount - len(setPlayerIDList)))  
 | 
        pkZoneMgr.playerDict = {} # Çå¿ÕÍæ¼Ò£¬ÖØÐÂÉèÖà  
 | 
        CrossChampionship.Send_CrossServerMsg_ChampionshipPlayer(isSync=True, clearPlayer=True)  
 | 
        for pID in setPlayerIDList:  
 | 
            batPlayer = CrossChampionship.ChampionshipBatPlayer()  
 | 
            batPlayer.zoneID = zoneID  
 | 
            batPlayer.playerID = pID  
 | 
            pkZoneMgr.playerDict[pID] = batPlayer  
 | 
              
 | 
        GameWorld.DebugAnswerCross(playerID, serverGroupID, "ÉèÖòÎÈüÍæ¼Ò³É¹¦:zoneID=%s,ÈËÊý=%s" % (zoneID, len(setPlayerIDList)))  
 | 
        CrossChampionship.Send_CrossServerMsg_ChampionshipPlayer(isSync=True)  
 | 
        return  
 | 
      
 | 
    # Ö¸¶¨Íæ¼Ò·Ö×é  
 | 
    canSetGroupStateList = [ShareDefine.CrossChampionshipState_Group64, ShareDefine.CrossChampionshipState_Group32,   
 | 
                            ShareDefine.CrossChampionshipState_Group16, ShareDefine.CrossChampionshipState_Group8]  
 | 
    if value1 in canSetGroupStateList:  
 | 
        if len(gmList) < 2:  
 | 
            GameWorld.DebugAnswerCross(playerID, serverGroupID, "·Ö×é²ÎÊý´íÎó£¬Ïê¼ûÃüÁî˵Ã÷")  
 | 
            return  
 | 
        groupMark = value1 / 10  
 | 
        zoneID = gmList[1]  
 | 
        groupPlayerIDList = gmList[2:]  
 | 
        pkZoneMgr = champMgr.GetChampPKZoneMgr(zoneID)  
 | 
        if not pkZoneMgr:  
 | 
            GameWorld.DebugAnswerCross(playerID, serverGroupID, "²»´æÔڸ÷ÖÇø!zoneID=%s" % zoneID)  
 | 
            return  
 | 
        if not groupPlayerIDList:  
 | 
            pkZoneMgr.battleInfo.pop(groupMark, None)  
 | 
            CrossChampionship.DoCrossChampionshipGroupRand(groupMark)  
 | 
            GameWorld.DebugAnswerCross(playerID, serverGroupID, "%sÇ¿ÈüÖØÐÂËæ»úÆ¥Åä!" % groupMark)  
 | 
            return  
 | 
                  
 | 
        for i in range(len(groupPlayerIDList))[::2]:  
 | 
            vsI = i + 1  
 | 
            if len(groupPlayerIDList) < vsI:  
 | 
                GameWorld.DebugAnswerCross(playerID, serverGroupID, "ÉèÖ÷Ö×éÍæ¼ÒIDÊý²»Æ¥Åä")  
 | 
                break  
 | 
            APlayerID = groupPlayerIDList[i]  
 | 
            BPlayerID = groupPlayerIDList[vsI]  
 | 
              
 | 
            changeBatNum = None  
 | 
            vsPlayerIDList = [APlayerID, BPlayerID]  
 | 
            chPlayerIDList = []  
 | 
              
 | 
            battleDict = pkZoneMgr.battleInfo.get(groupMark, {})  
 | 
            for battleNum in battleDict.keys():  
 | 
                batObj = pkZoneMgr.GetBattle(groupMark, battleNum)  
 | 
                if not batObj:  
 | 
                    continue  
 | 
                playerIDList = [batObj.playerIDA, batObj.playerIDB]  
 | 
                if APlayerID in playerIDList and BPlayerID in playerIDList:  
 | 
                    GameWorld.DebugAnswerCross(playerID, serverGroupID, "ÉèÖóɹ¦:%s VS %s" % (APlayerID, BPlayerID))  
 | 
                    break  
 | 
                if APlayerID not in playerIDList and BPlayerID not in playerIDList:  
 | 
                    continue  
 | 
                  
 | 
                for pID in playerIDList:  
 | 
                    if pID not in vsPlayerIDList:  
 | 
                        chPlayerIDList.append(pID)  
 | 
                          
 | 
                if changeBatNum == None:  
 | 
                    changeBatNum = battleNum  
 | 
                    continue  
 | 
                  
 | 
                changeBatObj = pkZoneMgr.GetBattle(groupMark, changeBatNum)  
 | 
                changeBatObj.playerIDA = vsPlayerIDList[0]  
 | 
                changeBatObj.playerIDB = vsPlayerIDList[1]  
 | 
                  
 | 
                batObj.playerIDA = chPlayerIDList[0] if len(chPlayerIDList) > 0 else 0  
 | 
                batObj.playerIDB = chPlayerIDList[1] if len(chPlayerIDList) > 1 else 0  
 | 
                GameWorld.DebugAnswerCross(playerID, serverGroupID, "ÉèÖóɹ¦:%s VS %s" % (APlayerID, BPlayerID))  
 | 
                GameWorld.DebugAnswerCross(playerID, serverGroupID, "½»»»³É¹¦:%s VS %s" % (batObj.playerIDA, batObj.playerIDB))  
 | 
                changeBatNum = "OK"  
 | 
                  
 | 
            if changeBatNum != "OK":  
 | 
                GameWorld.DebugAnswerCross(playerID, serverGroupID, "·Ö×éʧ°Ü£¬¼ì²éÍæ¼ÒÊÇ·ñÔÚ±¾·Ö×é:%s VS %s" % (APlayerID, BPlayerID))  
 | 
                  
 | 
        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)  
 | 
    state = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_CrossChampionshipState)  
 | 
    stateError = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_CrossChampionshipStateError)  
 | 
    champMgr = CrossChampionship.GetChampionshipMgr()  
 | 
    pkZoneIDList = champMgr.GetChampPKZoneIDList()  
 | 
    GameWorld.Log("ID=%s,state=%s,stateError=%s,pkZoneIDList=%s" % (ID, state, stateError, pkZoneIDList))  
 | 
    for zoneID in pkZoneIDList:  
 | 
        pkZoneMgr = champMgr.GetChampPKZoneMgr(zoneID)  
 | 
        if not pkZoneMgr:  
 | 
            continue  
 | 
          
 | 
#            self.guessInfo = {} # ¾º²ÂÐÅÏ¢ {¾º²ÂÀàÐÍ:[ChampionshipGuess, ...], ...}  
 | 
#            self.superPlayerCountInfo = {} # {¾º²ÂÀàÐÍ:{playerID:Ö§³ÖÈËÊý, ...}, ...}  
 | 
          
 | 
        batPlayerIDList = pkZoneMgr.GetBatPlayerIDList()  
 | 
        GameWorld.Log("=== ²ÎÈüÍæ¼Ò === zoneID=%s,playerCount=%s" % (zoneID, len(batPlayerIDList)))  
 | 
        for i, playerID in enumerate(batPlayerIDList, 1):  
 | 
            batPlayer = pkZoneMgr.GetBatPlayer(playerID)  
 | 
            if not batPlayer:  
 | 
                continue  
 | 
            GameWorld.Log("    %s,playerID=%s,fightPower=%s,accID=%s" % (i, batPlayer.playerID, batPlayer.fightPower, batPlayer.accID))  
 | 
              
 | 
        groupMarkKeys = pkZoneMgr.battleInfo.keys()  
 | 
        GameWorld.Log("=== ·Ö×éÐÅÏ¢ === zoneID=%s,%s" % (zoneID, groupMarkKeys))  
 | 
        for groupMark, battleDict in pkZoneMgr.battleInfo.items():  
 | 
            GameWorld.Log("    groupMark=%s,battleCount=%s" % (groupMark, len(battleDict)))  
 | 
            for battleNum in battleDict.keys():  
 | 
                batObj = pkZoneMgr.GetBattle(groupMark, battleNum)  
 | 
                if not batObj:  
 | 
                    continue  
 | 
                GameWorld.Log("        groupMark=%s,battleNum=%s,playerIDA=%s,playerIDB=%s,winPlayerID=%s"   
 | 
                              % (groupMark, battleNum, batObj.playerIDA, batObj.playerIDB, batObj.winPlayerID))  
 | 
                  
 | 
        GameWorld.Log("=== ¾º²ÂÐÅÏ¢ === zoneID=%s,%s" % (zoneID, pkZoneMgr.guessInfo.keys()))  
 | 
        for guessType, playerGuessDict in pkZoneMgr.guessInfo.items():  
 | 
            GameWorld.Log("    zoneID=%s,guessType=%s,supportCountInfo=%s" % (zoneID, guessType, pkZoneMgr.supportCountInfo.get(guessType, {})))  
 | 
            GameWorld.Log("    guessPlayerIDList=%s" % playerGuessDict.keys())  
 | 
            for guessPlayerID, guessObjList in playerGuessDict.items():  
 | 
                GameWorld.Log("    guessPlayerID=%s,guessObjListLen=%s" % (guessPlayerID, len(guessObjList)))  
 | 
                for guessObj in guessObjList:  
 | 
                    GameWorld.Log("        guessPlayerID=%s,tagPlayerID=%s,moneyTotal=%s,guessRank=%s,isClose=%s"   
 | 
                                  % (guessPlayerID, guessObj.tagPlayerID, guessObj.moneyTotal, guessObj.guessRank, guessObj.isClose))  
 | 
            GameWorld.Log("    ===")  
 | 
              
 | 
    offZoneIDList = champMgr.GetChampOfficialZoneIDList()  
 | 
    GameWorld.Log("ÏɹٷÖÇø: offZoneIDList=%s" % offZoneIDList)  
 | 
    for zoneID in offZoneIDList:  
 | 
        offZoneMgr = champMgr.GetChampOfficialZoneMgr(zoneID)  
 | 
        officialIDList = offZoneMgr.officialInfo.keys()  
 | 
        GameWorld.Log("=== ÏɹÙÐÅÏ¢ === zoneID=%s,%s" % (zoneID, officialIDList))  
 | 
        for officialID in officialIDList:  
 | 
            offObj = offZoneMgr.GetOfficialObj(officialID)  
 | 
            if not offObj:  
 | 
                continue  
 | 
            GameWorld.Log("    officialID=%s,playerID=%s,rank=%s,worshipCount=%s,worshipDouble=%s,applyPlayerIDList=%s,challengeCount=%s,lastDismissJuniorTime=%s"   
 | 
                          % (officialID, offObj.playerID, offObj.rank, offObj.worshipCount, offObj.worshipDouble, offObj.applyPlayerInfo.keys(), len(offObj.challengeList), offObj.lastDismissJuniorTime))  
 | 
              
 | 
    GameWorld.Log("==================================================")  
 | 
    return  
 | 
  
 |