#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#---------------------------------------------------------------------  
 | 
#  
 | 
#---------------------------------------------------------------------  
 | 
##@package GMT_MergeBattleInfo.py  
 | 
# GM»ñµÃ¿ç·þÕ½»ò¹úÍõÕ½ÐÅÏ¢  
 | 
#  
 | 
# @author wdb  
 | 
# @date 2012-12-28  
 | 
# @version 1.0  
 | 
#  
 | 
# @note  
 | 
#---------------------------------------------------------------------  
 | 
"""Version = 2012-12-28 10:00"""  
 | 
#---------------------------------------------------------------------  
 | 
#µ¼Èë  
 | 
import GMCommon  
 | 
from Common import mylog  
 | 
from Collections import DataServerPlayerData  
 | 
from Collections.CollectionDefine import UCN_DBPlayer  
 | 
#---------------------------------------------------------------------  
 | 
#È«¾Ö±äÁ¿  
 | 
  
 | 
#¿ç·þÕ½Õ½¶·×´Ì¬  
 | 
(  
 | 
Def_NotBegin, #»¹Ã»¿ªÊ¼   
 | 
Def_IDFirstWin, #µÚÒ»¸öÍæ¼ÒʤÀû(ÓëCampType_JusticeÒ»ÖÂ)  
 | 
Def_IDSecondWin, #µÚ¶þ¸öÍæ¼ÒʤÀû(ÓëCampType_EvilÒ»ÖÂ)  
 | 
Def_Battling, #ÕýÔÚÕ½¶·ÖÐ  
 | 
) = range(4)  
 | 
  
 | 
#----------------------------¿ç·þÕ½±í------------------------------------  
 | 
#±íÃû  
 | 
PyTable_MSBattle = "PyMSBattle"    
 | 
#---------------------------------------------------------------------  
 | 
  
 | 
## ÊÕµ½gmÃüÁîÖ´ÐÐ  
 | 
# @param gmCmdDict:{'coding': 'gbk', 'competeID': '176', 'key': '2', 'pack_type': 'GMT_MergeBattleInfo'}  
 | 
# @return None   
 | 
def OnExec(gmCmdDict):  
 | 
    competeID = GMCommon.ToIntDef(gmCmdDict.get("competeID", "0"))  
 | 
      
 | 
    if competeID > 0:  
 | 
        return GMCommon.Def_DoQueryUserDB, ""  
 | 
      
 | 
    # »Ø¸´  
 | 
    return GMCommon.Def_ParamErr, ''  
 | 
      
 | 
      
 | 
## ²éѯlogdb·µ»Ø  
 | 
# @param logdb:logdb  
 | 
# @param data:´«ÈëµÄÐÅÏ¢  
 | 
# @param gmCmdDict:gmÃüÁî×Öµä  
 | 
# @return None   
 | 
def LogDBResponse(logdb, data, gmCmdDict):     
 | 
    # »Ø¸´  
 | 
    return GMCommon.Def_ParamErr, ''  
 | 
  
 | 
  
 | 
## ²éѯuserdb·µ»Ø  
 | 
# @param userdb:userdb  
 | 
# @param data:´«ÈëµÄÐÅÏ¢  
 | 
# @param gmCmdDict:{'coding': 'gbk', 'competeID': '176', 'key': '2', 'pack_type': 'GMT_MergeBattleInfo'}  
 | 
# @return None   
 | 
def UserDBResponse(userdb, data, gmCmdDict):          
 | 
    battleCollect = userdb[PyTable_MSBattle]    
 | 
        
 | 
    competeID = GMCommon.ToIntDef(gmCmdDict.get("competeID", "0"))  
 | 
    coll = battleCollect.find({"CompeteID":competeID, "Result":{"$in":[Def_IDFirstWin, Def_IDSecondWin]}})  
 | 
      
 | 
    if coll.count() <= 0:  
 | 
        return GMCommon.Def_Success, {"competeID":competeID, "PlayerList":[]}  
 | 
      
 | 
    # Íæ¼ÒÐÅÏ¢ÁÐ±í  
 | 
    playerInfoList = []  
 | 
      
 | 
    # ÒѾÌí¼ÓÐÅÏ¢µÄÍæ¼ÒidÁÐ±í  
 | 
    playerIDList = []  
 | 
     
 | 
    # ¸ù¾ÝbattleIdµ¹ÐòÅÅÁУ¬´ÓbattleID´óµÄ(¸üеÄ)¶ÔÕ½¿ªÊ¼¼Ç¼£¬ÒѼǼµÄÍæ¼ÒÔò²»´¦Àí   
 | 
    coll.sort("BattleID", -1)  
 | 
    playerCollect = userdb[UCN_DBPlayer]  
 | 
  
 | 
    for battleInfo in coll:  
 | 
          
 | 
        battleID = battleInfo.get("BattleID", 0)  
 | 
        if battleID <= 0:  
 | 
            continue  
 | 
          
 | 
        winnerID, loserID = GetBattlePlayerID(battleInfo)  
 | 
          
 | 
        # Ìí¼ÓÍæ¼ÒÐÅÏ¢£¬ÒÑÌí¼ÓµÄÍæ¼ÒÔò²»´¦Àí  
 | 
        AddPlayerInfo(playerCollect, winnerID, playerInfoList, playerIDList, battleID, 1)  
 | 
        AddPlayerInfo(playerCollect, loserID, playerInfoList, playerIDList, battleID, 0)  
 | 
      
 | 
    resultMsg = {"competeID":competeID, "PlayerList":playerInfoList}  
 | 
      
 | 
    # ÐÅÏ¢³¤¶È²»´óÓëword  
 | 
    if len("%s"%resultMsg) > pow(2, 14):  
 | 
        return GMCommon.Def_MaxLimit, ""  
 | 
              
 | 
    return GMCommon.Def_Success, resultMsg  
 | 
  
 | 
  
 | 
## »ñµÃʤ¸ºµÄÍæ¼Òid  
 | 
#  @param userdb:userdb  
 | 
#  @param competeID:±ÈÈüÀàÐÍid  
 | 
#  @return None   
 | 
def GetBattlePlayerID(battleInfo):  
 | 
    playerID1 = battleInfo.get("PlayerID1", 0)  
 | 
    playerID2 = battleInfo.get("PlayerID2", 0)  
 | 
      
 | 
    result = battleInfo.get("Result")  
 | 
      
 | 
    if result == Def_IDFirstWin:  
 | 
        return playerID1, playerID2  
 | 
      
 | 
    elif result == Def_IDSecondWin:  
 | 
        return playerID2, playerID1  
 | 
      
 | 
    return 0, 0  
 | 
  
 | 
  
 | 
## Ìí¼ÓÍæ¼ÒÐÅÏ¢  
 | 
#  @param playerCollect:dbÍæ¼Ò±í  
 | 
#  @param playerID:Íæ¼Òid  
 | 
#  @param playerInfoList:Íæ¼ÒÐÅÏ¢ÁÐ±í  
 | 
#  @param playerIDList:ÒÑÌí¼ÓÍæ¼ÒIDÁÐ±í  
 | 
#  @param battleID:¶ÔÕ½id  
 | 
#  @param result:¶ÔÕ½½á¹û  
 | 
#  @return None   
 | 
def AddPlayerInfo(playerColl, playerID, playerInfoList, playerIDList, battleID, result):  
 | 
    if playerID <= 0:  
 | 
        return  
 | 
      
 | 
    # Íæ¼ÒÐÅÏ¢ÒÑÌí¼Ó  
 | 
    if playerID in playerIDList:  
 | 
        return  
 | 
      
 | 
    dbPlayer = DataServerPlayerData.tagDBPlayer()  
 | 
    dbPlayer.IsDeleted = 0  
 | 
      
 | 
    loadOK = dbPlayer.adoLoadCEx(playerColl, {'PlayerID':playerID, 'IsDeleted':dbPlayer.IsDeleted})          
 | 
    if not loadOK:       
 | 
        return  
 | 
      
 | 
    # [Õ˺Å, Íæ¼ÒÃû, Íæ¼ÒµÈ¼¶, Ö°Òµ, vipµÈ¼¶, Õ½¶·Á¦, ÍþÍû, Õ½³¡id, Ê¤¸º(0¸º£¬ 1ʤ)]  
 | 
    playerInfo = [dbPlayer.AccID, playerID, dbPlayer.PlayerName, dbPlayer.LV, dbPlayer.Job,  
 | 
                  dbPlayer.VIPLv, dbPlayer.FightPower, dbPlayer.ExAttr2, battleID, result]  
 | 
  
 | 
    # Ìí¼ÓÍæ¼ÒÐÅÏ¢  
 | 
    playerInfoList.append(playerInfo)  
 | 
    # ½«Íæ¼ÒidÌí¼Óµ½ÒѼǼÁбíÖÐ  
 | 
    playerIDList.append(playerID)  
 | 
    return  
 | 
  
 | 
  
 |