#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#---------------------------------------------------------------------
|
#
|
#---------------------------------------------------------------------
|
##@package GMT_GetPlayerInfo.py
|
# GMÃüÁ»ñµÃÍæ¼ÒÐÅÏ¢
|
#
|
# @author wdb
|
# @date 2012-6-14
|
# @version 1.6
|
#
|
# @note
|
# @change: "2012-06-21 15:30" wdb intÐ޸ĵ½GMCommon¿ª½Ó¿Ú
|
# @change: "2012-07-12 18:00" wdb Ôö¼Ó±àÂëÊôÐÔ
|
# @change: "2012-07-30 11:30" wdb GM»Ø¸´Ï¸»¯£¬´úÂëÓÅ»¯
|
# @change: "2012-08-10 17:00" whx Ôö¼Ó²Ö¿âÃÜÂë
|
# @change: "2015-01-30 02:00" hxp Ôö¼ÓתÉú´ÎÊý¡¢×ªÉúµÈ¼¶¡¢°ó×êÐÅÏ¢
|
# @change: "2015-05-22 14:30" hxp Ôö¼Ó´óʦµÈ¼¶¡¢Õ½¶·Á¦
|
#---------------------------------------------------------------------
|
"""Version = 2015-05-22 14:30"""
|
#---------------------------------------------------------------------
|
#µ¼Èë
|
from Collections import DataServerPlayerData
|
from MangoDBCommon import fix_incomingText
|
from Collections.CollectionDefine import *
|
import GMCommon
|
#---------------------------------------------------------------------
|
#È«¾Ö±äÁ¿
|
|
#---------------------------------------------------------------------
|
|
## ÊÕµ½gmÃüÁîÖ´ÐÐ
|
# @param gmCmdDict:gmÃüÁî×Öµä
|
# @return None
|
def OnExec(gmCmdDict):
|
playerFind = gmCmdDict.get(GMCommon.Def_GMKey_PlayerFind, '')
|
queryType = gmCmdDict.get(GMCommon.Def_GMKey_QueryType, '')
|
|
if playerFind == '':
|
return GMCommon.Def_ParamErr, ''
|
|
elif queryType == 'accID':
|
return GMCommon.Def_DoQueryLogDB, ''
|
|
return GMCommon.Def_DoQueryUserDB, '%s'%GMCommon.Def_GMKey_PlayerName
|
|
|
## ²éѯlogdb·µ»Ø
|
# @param logdb:logdb
|
# @param data:´«ÈëµÄÐÅÏ¢
|
# @param gmCmdDict:gmÃüÁî×Öµä
|
# @return None
|
def LogDBResponse(logdb, data, gmCmdDict):
|
playerFind = gmCmdDict.get(GMCommon.Def_GMKey_PlayerFind, '')
|
queryType = gmCmdDict.get(GMCommon.Def_GMKey_QueryType, '')
|
|
if queryType == 'accID' and GMCommon.GetPlayerOnLineByAccID(logdb, playerFind):
|
return GMCommon.Def_SendToGameServer, ''
|
|
# ת»»×Ö·û´®
|
if data != '' and GMCommon.GetPlayerOnLineByAccID(logdb, data):
|
return GMCommon.Def_SendToGameServer, ''
|
|
return GMCommon.Def_DoQueryUserDB, ''
|
|
|
## ²éѯuserdb·µ»Ø
|
# @param userdb:userdb
|
# @param data:´«ÈëµÄÐÅÏ¢
|
# @param gmCmdDict:gmÃüÁî×Öµä
|
# @return None
|
def UserDBResponse(userdb, data, gmCmdDict):
|
# ת»»×Ö·û´®
|
playerFind = gmCmdDict.get(GMCommon.Def_GMKey_PlayerFind, '')
|
queryType = gmCmdDict.get(GMCommon.Def_GMKey_QueryType, '')
|
|
# queryType²»ÊÇaccID£¬·¢Ë͵ÄÐÅÏ¢ÊÇÍæ¼ÒµÄÃû×Ö
|
if queryType != 'accID':
|
playerAccID = GMCommon.GetPlayerAccID(userdb, {'PlayerName':fix_incomingText(playerFind), 'IsDeleted':0})
|
|
if playerAccID == '':
|
return GMCommon.Def_NoTag, ''
|
|
else:
|
# queryTypeΪaccID£¬·¢Ë͵ÄÐÅÏ¢¾ÍÊÇÍæ¼ÒµÄAccID
|
playerAccID = playerFind
|
|
# ·µ»Øplayerid£¬ÅжÏÊÇ·ñÔÚÏß
|
if data == '%s'%GMCommon.Def_GMKey_PlayerName:
|
return GMCommon.Def_DoQueryLogDB, playerAccID
|
|
accountData = DataServerPlayerData.tagDSAccount()
|
accountData.ACCID = playerAccID
|
accountData.adoLoad(userdb[UCN_DSAccount])
|
|
collection = userdb[UCN_DBPlayer]
|
dbPlayer = DataServerPlayerData.tagDBPlayer()
|
dbPlayer.IsDeleted = 0
|
|
loadOK = dbPlayer.adoLoadCEx(collection, {'AccID':fix_incomingText(playerAccID),
|
'IsDeleted':dbPlayer.IsDeleted})
|
|
if not loadOK:
|
# »Ø¸´gm
|
return GMCommon.Def_NoTag, ''
|
|
roleDict = {}
|
moneyMinusDict = {}
|
collection = userdb[UCN_RoleNomalDict]
|
docs = collection.find({'PlayerID':dbPlayer.PlayerID})
|
if docs.count():
|
obj = DataServerPlayerData.tagRoleNomalDict()
|
doc = list(docs)[0]
|
#ÓÐÊý¾Ý
|
if doc.has_key('__PackSave'):
|
for i in xrange(doc['Count']):
|
obj.readRecord(doc['%s'%(i+1)])
|
if obj.DictName.startswith("MoneyMinus_") and obj.DictValue > 0:
|
moneyMinusDict[int(obj.DictName[len("MoneyMinus_"):])] = -obj.DictValue # »õ±Ò¸ºÖµ
|
if 1 in moneyMinusDict and 2 in moneyMinusDict and 4 in moneyMinusDict:
|
break
|
if obj.DictValue > 0:
|
roleDict[obj.DictName] = obj.DictValue
|
|
playerInfo = {
|
'AccID':dbPlayer.AccID, # Õ˺Å
|
'AccState':dbPlayer.AccState, # Õ˺Å״̬
|
'PlayerID':dbPlayer.PlayerID,
|
'Name':dbPlayer.PlayerName, # Íæ¼ÒÃû
|
'GMLV':dbPlayer.GMLevel, #gmµÈ¼¶
|
|
'Job':dbPlayer.Job, # Ö°Òµ
|
'LV':dbPlayer.LV, #Íæ¼ÒµÈ¼¶
|
'OfficialRank':dbPlayer.OfficialRank, #¾³½ç
|
'FightPower':dbPlayer.FightPowerEx * 100000000 + dbPlayer.FightPower, #Õ½¶·Á¦
|
'VIPLV':dbPlayer.VIPLv, # vipµÈ¼¶
|
|
'MapID':dbPlayer.MapID, #µ±Ç°µØÍ¼id
|
'Gold':moneyMinusDict[1] if 1 in moneyMinusDict else dbPlayer.Gold, # Ôª±¦
|
'GoldPaper':moneyMinusDict[2] if 2 in moneyMinusDict else dbPlayer.GoldPaper, # °ó×ê
|
'Silver':dbPlayer.Silver, # ÒøÁ½
|
'SilverPaper':moneyMinusDict[4] if 4 in moneyMinusDict else dbPlayer.SilverPaper, # ÉñÓñ
|
|
'FamilyName':dbPlayer.FamilyName, # ¼Ò×åÃû³Æ
|
|
'LogoffTime':dbPlayer.LogoffTime, #ÀëÏßʱ¼ä
|
'LoginTime':dbPlayer.LoginTime, # ÉÏÏßʱ¼ä
|
'LoginIP':dbPlayer.LoginIP, #µÇÈëIP
|
'ClientVersion':accountData.ClientVersion, #¿Í»§¶Ë°æ±¾ºÅ
|
|
'Online':0,
|
}
|
|
# ÐèÒª¶îÍâͬ²½µÄ×Ô¶¨Òå»õ±Ò
|
CurrencyValueDict = {}
|
for moneyType in [99, 98]:
|
if moneyType == 99:
|
moneyValue = dbPlayer.ExAttr11
|
else:
|
moneyValue = roleDict.get("PlayerCurrency_%s" % moneyType, 0)
|
CurrencyValueDict['PlayerCurrency_%s' % moneyType] = moneyValue
|
playerInfo.update(CurrencyValueDict)
|
return GMCommon.Def_Success, playerInfo
|
|
|
|
|