#!/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)) resultMsg = {"PackIndex":packIndex, "ItemList":itemList} # ²»´óÓëword if len(resultMsg) > pow(2, 14): 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: continue curItemInfo[k] = v return curItemInfo