#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package Player.RemoteQuery.GY_Query_GMTDelPlayerItem # # @todo:GM¹¤¾ß¿Û³ýÍæ¼ÒÎïÆ· # @author hxp # @date 2021-03-18 # @version 1.0 # # ÏêϸÃèÊö: GM¹¤¾ß¿Û³ýÍæ¼ÒÎïÆ· # #------------------------------------------------------------------------------- #"""Version = 2021-03-18 19:00""" #------------------------------------------------------------------------------- import GMCommon import ItemCommon import ShareDefine import GameWorld import ChConfig ## ÇëÇóÂß¼­ # @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 '' orderId, gmCmdDict = packCMDList GameWorld.Log("GY_Query_GMTDelPlayerItem: %s" % gmCmdDict, query_ID) itemID = GameWorld.ToIntDef(gmCmdDict.get("itemID", 0)) delItemCount = GameWorld.ToIntDef(gmCmdDict.get("delItemCount", 0)) Result = GMCommon.Def_Success retMsg = {"itemID":itemID, "delItemCount":delItemCount, "accID":curPlayer.GetAccID()} # ɾ³ýÎïÆ· _DoGMDelItem(curPlayer, gmCmdDict, itemID, delItemCount, retMsg) # ²éѯʣÓàÎïÆ·Ã÷ϸ findItemDict = {} for packIndex in xrange(ShareDefine.rptMax): itemPack = curPlayer.GetItemManager().GetPack(packIndex) if not itemPack: continue itemList = [] for index in xrange(itemPack.GetCount()): curItem = itemPack.GetAt(index) if not curItem or curItem.IsEmpty(): continue if curItem.GetItemTypeID() != itemID: continue itemList.append(_GetItemInfo(curItem)) if itemList: findItemDict[str(packIndex)] = itemList retMsg["findItemDict"] = findItemDict resultMsg = str([orderId, retMsg, 'GMT_DelPlayerItem', Result]) GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'GMToolResult', resultMsg, len(resultMsg)) return '' def _DoGMDelItem(curPlayer, gmCmdDict, itemID, delItemCount, retMsg): delRemark = gmCmdDict.get("delRemark", "") delGUIDInfo = gmCmdDict.get("delGUIDInfo", "") delGUIDInfo = eval(delGUIDInfo) if (delGUIDInfo.startswith("{") and delGUIDInfo.endswith("}")) else {} if not delGUIDInfo: return GameWorld.DebugLog("delGUIDInfo: %s" % delGUIDInfo) succDelItemDict = {} succDelCount = 0 for delGUID, delItemInfo in delGUIDInfo.items(): packIndex, delIndex = delItemInfo GameWorld.DebugLog("delGUID=%s,packIndex=%s,delIndex=%s" % (delGUID, packIndex, delIndex)) itemPack = curPlayer.GetItemManager().GetPack(int(packIndex)) if not itemPack: continue if delIndex >= itemPack.GetCount(): continue curItem = itemPack.GetAt(delIndex) if not curItem or curItem.IsEmpty(): continue if curItem.GetItemTypeID() != itemID: continue if curItem.GetGUID() != delGUID: continue remainDelCount = delItemCount - succDelCount # »¹ÐèҪɾ³ýµÄ¸öÊý if remainDelCount <= 0: break curCount = curItem.GetCount() delCnt = min(remainDelCount, curCount) itemInfo = _GetItemInfo(curItem) GameWorld.DebugLog(" delCnt=%s" % delCnt) infoDict = {ChConfig.Def_Cost_Reason_SonKey:delRemark} ItemCommon.DelItem(curPlayer, curItem, delCnt, False, "GM", infoDict, isForceDR=True) itemInfo["Count"] = "-%s" % delCnt succDelCount += delCnt if str(packIndex) not in succDelItemDict: succDelItemDict[str(packIndex)] = [] itemList = succDelItemDict[str(packIndex)] itemList.append(itemInfo) retMsg["succDelItemDict"] = succDelItemDict retMsg["succDelCount"] = succDelCount return def _GetItemInfo(curItem): 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() } return curItemInfo