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