From 3196b9eef5ff1d7c35f8f68b295951ce8af35a0c Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 18 三月 2021 18:57:41 +0800
Subject: [PATCH] 8728 【主干】【bt】【bt2】【btzf】【GM工具】增加删除物品、扣除货币功能

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_GMTDelPlayerItem.py  |  136 +++++++++++++++++++++++++++
 ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GMT_DelPlayerMoney.py                                     |   42 ++++++++
 ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GMT_DelPlayerItem.py                                      |   46 +++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_GMTDelPlayerMoney.py |   68 +++++++++++++
 4 files changed, 292 insertions(+), 0 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GMT_DelPlayerItem.py b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GMT_DelPlayerItem.py
new file mode 100644
index 0000000..22e8f80
--- /dev/null
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GMT_DelPlayerItem.py
@@ -0,0 +1,46 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package GM.Commands.GMT_DelPlayerItem
+#
+# @todo:GM工具扣除玩家物品
+# @author hxp
+# @date 2021-03-18
+# @version 1.0
+#
+# 详细描述: GM工具扣除玩家物品
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2021-03-18 19:00"""
+#-------------------------------------------------------------------------------
+
+import GMCommon
+import ChConfig
+import GameWorld
+
+
+#逻辑实现(这里curPlayer = None)
+## 执行逻辑
+#  @param curPlayer 当前玩家 None
+#  @param gmList [cmdIndex,gmAccID,forbidAccIP]
+#  @return None
+#  @remarks 函数详细说明.
+def OnExec(orderId, gmCmdDict): 
+    GameWorld.Log("GMT_DelPlayerItem: %s" % gmCmdDict)
+    
+    playerFind = gmCmdDict.get(GMCommon.Def_GMKey_PlayerFind, '')
+    queryType = gmCmdDict.get(GMCommon.Def_GMKey_QueryType, '')
+    
+    if queryType == 'accID': 
+        #玩家账户 []
+        GMCommon.GMTool_MapServer_Query(ChConfig.queryType_sqtPlayerByAccID, orderId,
+                                        playerFind, gmCmdDict, 'GMTDelPlayerItem', [orderId, gmCmdDict], False)
+        return
+    
+    #玩家名字 []
+    GMCommon.GMTool_MapServer_Query(ChConfig.queryType_sqtPlayerByName, orderId,
+                                    playerFind, gmCmdDict, 'GMTDelPlayerItem', [orderId, gmCmdDict], False)
+    return
+
+
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GMT_DelPlayerMoney.py b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GMT_DelPlayerMoney.py
new file mode 100644
index 0000000..016f839
--- /dev/null
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GMT_DelPlayerMoney.py
@@ -0,0 +1,42 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package GM.Commands.GMT_DelPlayerMoney
+#
+# @todo:GM工具扣除玩家货币
+# @author hxp
+# @date 2021-03-18
+# @version 1.0
+#
+# 详细描述: GM工具扣除玩家货币
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2021-03-18 19:00"""
+#-------------------------------------------------------------------------------
+import GMCommon
+import ChConfig
+
+
+#逻辑实现(这里curPlayer = None)
+## 执行逻辑
+#  @param curPlayer 当前玩家 None
+#  @param gmList [cmdIndex,gmAccID,forbidAccIP]
+#  @return None
+#  @remarks 函数详细说明.
+def OnExec(orderId, gmCmdDict): 
+    playerFind = gmCmdDict.get(GMCommon.Def_GMKey_PlayerFind, '')
+    queryType = gmCmdDict.get(GMCommon.Def_GMKey_QueryType, '')
+    
+    if queryType == 'accID': 
+        #玩家账户 []
+        GMCommon.GMTool_MapServer_Query(ChConfig.queryType_sqtPlayerByAccID, orderId, 
+                                        playerFind, gmCmdDict, 'GMTDelPlayerMoney', [orderId, gmCmdDict], False)
+        return
+    
+    #玩家名字 []
+    GMCommon.GMTool_MapServer_Query(ChConfig.queryType_sqtPlayerByName, orderId, 
+                                    playerFind, gmCmdDict, 'GMTDelPlayerMoney', [orderId, gmCmdDict], False)
+    return
+
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_GMTDelPlayerItem.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_GMTDelPlayerItem.py
new file mode 100644
index 0000000..f391fb9
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_GMTDelPlayerItem.py
@@ -0,0 +1,136 @@
+#!/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
+
+    
+    
+    
+    
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_GMTDelPlayerMoney.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_GMTDelPlayerMoney.py
new file mode 100644
index 0000000..6ba2146
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_GMTDelPlayerMoney.py
@@ -0,0 +1,68 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Player.RemoteQuery.GY_Query_GMTDelPlayerMoney
+#
+# @todo:GM工具扣除玩家货币
+# @author hxp
+# @date 2021-03-18
+# @version 1.0
+#
+# 详细描述: GM工具扣除玩家货币
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2021-03-18 19:00"""
+#-------------------------------------------------------------------------------
+
+import GMCommon
+import ShareDefine
+import PlayerControl
+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
+    moneyType = GameWorld.ToIntDef(gmCmdDict.get("moneyType"))
+    moneyValue = GameWorld.ToIntDef(gmCmdDict.get("moneyValue"))
+    delRemark = gmCmdDict.get("delRemark", "")
+    
+    retMsg = ""
+    Result = GMCommon.Def_Success
+    if moneyType not in [1, 2, 3, 4] and moneyType not in ShareDefine.TYPE_Price_CurrencyDict:
+        Result = GMCommon.Def_MoneyTypeErr
+    elif not moneyValue:
+        Result = GMCommon.Def_ParamErr
+        retMsg = "money value error."
+    elif not PlayerControl.HaveMoney(curPlayer, moneyType, moneyValue, False):
+        Result = GMCommon.Def_ParamErr
+        retMsg = "money is not enough. only %s" % PlayerControl.GetMoney(curPlayer, moneyType)
+        
+    if Result == GMCommon.Def_Success:
+        infoDict = {ChConfig.Def_Cost_Reason_SonKey:delRemark}
+        if not PlayerControl.PayMoney(curPlayer, moneyType, moneyValue, ChConfig.Def_Cost_GM, infoDict, isNotify=False):
+            Result = GMCommon.Def_Unknow
+            retMsg = "pay money error."
+        else:
+            retMsg = "remaining money %s" % PlayerControl.GetMoney(curPlayer, moneyType)
+            
+    resultMsg = str([orderId, retMsg, 'GMT_DelPlayerMoney', Result])
+    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'GMToolResult', resultMsg, len(resultMsg))
+    return ''
+    
+    
+    
+    
+    
\ No newline at end of file

--
Gitblit v1.8.0