#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#---------------------------------------------------------------------
|
#
|
#---------------------------------------------------------------------
|
##@package GMT_PlayerItemInfo.py
|
# GMÃüÁî»ñµÃÍæ¼ÒÎïÆ·ÐÅÏ¢
|
#
|
# @author wdb
|
# @date 2012-6-14
|
# @version 1.4
|
#
|
# @note
|
# @change: "2012-06-21 15:30" wdb intÐ޸ĵ½GMCommon¿ª½Ó¿Ú
|
# @change: "2012-06-29 21:30" wdb ·µ»ØÐÅÏ¢ÊÇ·ñ¹ý³¤
|
# @change: "2012-07-12 18:00" wdb Ôö¼Ó±àÂëÊôÐÔ
|
# @change: "2012-07-30 11:30" wdb GM»Ø¸´Ï¸»¯£¬´úÂëÓÅ»¯
|
#---------------------------------------------------------------------
|
"""Version = 2012-07-30 11:30"""
|
#---------------------------------------------------------------------
|
#µ¼Èë
|
from Collections import DataServerPlayerData
|
from MangoDBCommon import fix_incomingText
|
from Collections.CollectionDefine import *
|
import GMCommon
|
#---------------------------------------------------------------------
|
#È«¾Ö±äÁ¿
|
# ÎïÆ·userdataµÄ¶¨Òåkey
|
IudetEquipAddSkillList = 3
|
IudetEquipAddSkillCnt = 4
|
IudetWakeUpCnt = 12
|
|
# ÏÔʾ˵Óб³°üÀàÐÍ
|
ShowAllPack = -1
|
|
#---------------------------------------------------------------------
|
|
## ÊÕµ½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
|
|
collection = userdb[UCN_DBPlayer]
|
dbPlayer = DataServerPlayerData.tagDBPlayer()
|
dbPlayer.IsDeleted = 0
|
|
loadOK = dbPlayer.adoLoadCEx(collection, {'AccID':fix_incomingText(playerAccID),
|
'IsDeleted':dbPlayer.IsDeleted})
|
# ¼ÓÈëÈËÎïÐÅÏ¢
|
if not loadOK:
|
return GMCommon.Def_NoTag, ""
|
|
# »ñµÃÍæ¼ÒÎïÆ·
|
itemCollection = userdb[UCN_RoleItem]
|
itemFind = itemCollection.find({'PlayerID':dbPlayer.PlayerID})
|
|
itemList = []
|
# ÎÞÎïÆ·
|
if itemFind.count() <= 0:
|
return GMCommon.Def_Success, itemList
|
|
itemInfo = itemFind[0]
|
packIndex = GMCommon.ToIntDef(gmCmdDict.get(GMCommon.Def_GMKey_PackIndex, ''))
|
if packIndex == ShowAllPack:
|
# Ôݲ»Ìṩ²éѯËùÓеÄÎïÆ·
|
return GMCommon.Def_ParamErr, "Not allowed to query all package items."
|
# ±éÀúËùÓÐÎïÆ·
|
for itemIndex in range(1, itemInfo['Count'] + 1):
|
itemDict = itemInfo.get('%s'%itemIndex, {})
|
# ÓÐÖ¸¶¨±³°üÀàÐÍ£¬Ôò¸ù¾Ý±³°üÀàÐ͹ýÂËÎïÆ·
|
if packIndex != ShowAllPack and packIndex != itemDict['ItemPlaceType']:
|
continue
|
|
itemList.append(_GetItemInfo(itemDict))
|
|
totalItemCount = len(itemList)
|
resultMsg = {"PackIndex":packIndex, "TotalItemCount":totalItemCount, "ItemList":itemList}
|
# ²»´óÓëword
|
if len(str(resultMsg)) > 65000:
|
return GMCommon.Def_MaxLimit, ''
|
|
# »Ø¸´²éѯÐÅÏ¢
|
return GMCommon.Def_Success, resultMsg
|
|
|
## »ñµÃÎïÆ·ÐÅÏ¢
|
# @param itemDict: ÎïÆ·ÐÅÏ¢×Öµä
|
# @return curItemInfo£ºµ±Ç°ÎïÆ·ÏÔʾÐÅÏ¢
|
def _GetItemInfo(itemDict):
|
# "ItemGUID" : "096389AD-904F-4DAA-B7ED155B8663CE45",
|
# "ItemTypeID" : NumberLong(3901),
|
# "Count" : 100,
|
# "IsBind" : 0,
|
# "UserData" : "{}",
|
# "IsSuite" : 0,
|
# "RemainHour" : 0,
|
# "GearScore" : NumberLong(0),
|
# "CreateTime" : "2019-10-16 20:12:17"
|
|
# "ItemPlaceIndex" : 1,
|
# "PlayerID" : NumberLong(268902),
|
# "ItemPlaceType" : 2,
|
# "UserDataLen" : NumberLong(2),
|
# "IsLocked" : 0,
|
# "SID" : -1135840175,
|
# "VerNO" : NumberLong(1),
|
|
curItemInfo = {}
|
for k, v in itemDict.items():
|
if k in ["UserDataLen", "ItemPlaceType", "PlayerID", "IsLocked", "SID", "VerNO"]:
|
continue
|
if not v or v == "{}":
|
continue
|
curItemInfo[k] = v
|
|
return curItemInfo
|
|