hxp
2 天以前 5f3b500dd8efc188323d6e6ec2a74857e82142c8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package PyMongoDB.GMToolLogicProcess.Commands.GMT_DelPlayerItem
#
# @todo:GM¹¤¾ßÃüÁî - ¿Û³ýÍæ¼ÒÎïÆ·
# @author hxp
# @date 2026-02-10
# @version 1.0
#
# ÏêϸÃèÊö: GM¹¤¾ßÃüÁî - ¿Û³ýÍæ¼ÒÎïÆ·
#
#-------------------------------------------------------------------------------
#"""Version = 2026-02-10 20:00"""
#-------------------------------------------------------------------------------
 
import GMCommon
import GameWorld
import DataRecordPack
import ShareDefine
import ItemCommon
import ChConfig
 
## ÊÕµ½gmÃüÁîÖ´ÐÐ
# @param gmCmdDict:gmÃüÁî×Öµä
# @return None 
def OnExec(gmCmdDict):
    
    errorMsg = ""
    from GMToolLogicProcess import  ProjSpecialProcess
    Result, curPlayer = ProjSpecialProcess.GMCmdPlayerValidation(gmCmdDict, False)
    if Result != GMCommon.Def_Success:
        return Result, errorMsg
    if not curPlayer:
        return Result, "Íæ¼Ò²»ÔÚÏß"
    
    # Íæ¼ÒÔÚÏߣ¬Ö±½Ó´¦Àí
    playerID = curPlayer.GetPlayerID()
    Result = GMCommon.Def_Unknow
    GMT_Name = gmCmdDict.get(GMCommon.Def_GMKey_Type, '') 
    
    itemID = GameWorld.ToIntDef(gmCmdDict.get("itemID", 0))
    delItemCount = GameWorld.ToIntDef(gmCmdDict.get("delItemCount", 0))
    
    resultDict = {"itemID":itemID, "delItemCount":delItemCount, "accID":curPlayer.GetAccID()}
    
    # É¾³ýÎïÆ·
    _DoGMDelItem(curPlayer, gmCmdDict, itemID, delItemCount, resultDict)
    
    # ²éѯʣÓàÎïÆ·Ã÷ϸ
    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
    resultDict["findItemDict"] = findItemDict
    
    Result = GMCommon.Def_Success
    #Á÷Ïò Ôö¼Ó½ð¶î¼Ç¼
    DataRecordPack.DR_ToolGMOperate(playerID, curPlayer.GetPlayerName(), curPlayer.GetAccID(), GMT_Name, resultDict)
    return Result, resultDict
 
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