| #!/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  | 
|   | 
|   |