#!/usr/bin/python # -*- coding: GBK -*- #--------------------------------------------------------------------- # #--------------------------------------------------------------------- ##@package GY_Query_PlayerItemInfo # @todo: GM²éÑ¯Íæ¼ÒÎïÆ· ÐÅÏ¢ # # @author: wdb # @date 2012-06-06 12:00 # @version 1.4 # # @note # @change: "2012-06-14 18:00" wdb gm¹¤¾ßµ÷Õû£¬Ôö¼ÓÃüÁîid # @change: "2012-06-28 16:30" wdb ɾ³ý´íÎólog£¬Ôö¼Ó±³°üÀàÐÍ # @change: "2012-06-29 21:30" wdb ·µ»ØÐÅÏ¢ÊÇ·ñ¹ý³¤ # @change: "2015-12-29 11:00" hxp ¿ª·ÅÆäËû±³°ü²éѯ #--------------------------------------------------------------------- #"""Version = 2015-12-29 11:00""" #--------------------------------------------------------------------- import IPY_GameWorld import GameWorld import ShareDefine import GMCommon #--------------------------------------------------------------------- # ÏÔʾ˵Óб³°üÀàÐÍ ShowAllPack = -1 ## ÇëÇóÂß¼­ # @param query_Type ÇëÇóÀàÐÍ # @param query_ID ÇëÇóµÄÍæ¼ÒID # @param packCMDList ·¢°üÃüÁî [ ] # @param tick µ±Ç°Ê±¼ä # @return resultDisc # @remarks º¯ÊýÏêϸ˵Ã÷. def DoLogic(query_Type, query_ID, packCMDList, tick): curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(query_ID) if not curPlayer or curPlayer.IsEmpty(): return '' packIndex = packCMDList[1] itemList = [] # ÊÇ·ñÖ¸¶¨ÏÔʾµÄ±³°üÀàÐÍ if IPY_GameWorld.rptDeleted <= packIndex <= ShareDefine.rptMax: packTypes = [packIndex] elif packIndex == ShowAllPack: return 'Not allowed to query all package items.' # Òª²é¿´µÄ±³°ü for packIndex in packTypes: # ±éÀúpack¸ñ×Ó£¬»ñµÃÎïÆ·ÐÅÏ¢ packItemList = _GetPackItem(curPlayer, packIndex) itemList.extend(packItemList) totalItemCount = len(itemList) gmResult = GMCommon.Def_Success resultMsg = {"PackIndex":packIndex, "TotalItemCount":totalItemCount, "ItemList":itemList} retData = str([packCMDList[0], resultMsg, 'GMT_PlayerItemInfo', gmResult]).replace(" ", "") if len(retData) >= 65535: gmResult = GMCommon.Def_MaxLimit # Êý¾Ý¹ý´ó resultMsg["ItemList"] = itemList[:totalItemCount / 2] # ÔÝÖ»·µ»ØÒ»°ë retData = str([packCMDList[0], resultMsg, 'GMT_PlayerItemInfo', gmResult]).replace(" ", "") GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'GMToolResult', retData, len(retData)) return '' ## »ñÈ¡±³°ü×Öµä # @param curFindPlayer µ±Ç°Íæ¼Ò # @param packIndex ±³°üË÷Òý # @param discKey ×Öµäkey # @return None def _GetPackItem(curFindPlayer, packIndex): itemPack = curFindPlayer.GetItemManager().GetPack(packIndex) itemList = [] if not itemPack: return itemList for index in range(itemPack.GetCount()): curItem = itemPack.GetAt(index) if curItem == None: continue if curItem.IsEmpty(): continue itemList.append(_GetItemInfo(curItem)) return itemList def _GetItemInfo(curItem): # "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 = {"ItemGUID":curItem.GetGUID(), "ItemTypeID":curItem.GetItemTypeID(), #"ItemName":curItem.GetName().decode(ShareDefine.Def_Game_Character_Encoding).encode(GameWorld.GetCharacterEncoding()), #"Count":curItem.GetCount(), #"UserData":curItem.GetUserData(), #"IsBind":curItem.GetIsBind(), #"IsSuite":1 if curItem.GetSuiteID() else 0, #"RemainHour":curItem.GetRemainHour(), #"GearScore":curItem.GetGearScore(), "CreateTime":curItem.GetCreateTime(), "ItemPlaceIndex":curItem.GetItemPlaceIndex() } if curItem.GetSuiteID(): curItemInfo["IsSuite"] = 1 if curItem.GetCount() > 1: curItemInfo["Count"] = curItem.GetCount() if curItem.GetUserData() not in ["", "{}"]: curItemInfo["UserData"] = curItem.GetUserData() if curItem.GetIsBind(): curItemInfo["IsBind"] = curItem.GetIsBind() if curItem.GetRemainHour(): curItemInfo["RemainHour"] = curItem.GetRemainHour() if curItem.GetGearScore(): curItemInfo["GearScore"] = curItem.GetGearScore() return curItemInfo