#!/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
|
|
|
|
|
|