From 2bb7c0c9764b3aa2a2ed1e860ceee4e515508926 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 19 五月 2021 11:02:30 +0800
Subject: [PATCH] 5015 【主干】【bt】【bt2】【工具】GM工具支持修改玩家数据(支持运行自定义脚本命令GMT_Execfile)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/GMCommon.py | 5 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GMTExec/Test.py | 41 ++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_GMTExecfile.py | 91 ++++++++++++++++++
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GMT_Execfile.py | 77 +++++++++++++++
ServerPython/CoreServerGroup/GameServer/Script/GM/GMTExec/Test.py | 47 +++++++++
5 files changed, 261 insertions(+), 0 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GMT_Execfile.py b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GMT_Execfile.py
new file mode 100644
index 0000000..0cc0ac3
--- /dev/null
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GMT_Execfile.py
@@ -0,0 +1,77 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package GM.Commands.GMT_Execfile
+#
+# @todo:执行命令文件
+# @author hxp
+# @date 2021-05-19
+# @version 1.0
+#
+# 详细描述: 执行命令文件
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2021-05-19 11:00"""
+#-------------------------------------------------------------------------------
+
+import GMCommon
+import GameWorld
+import DataRecordPack
+import ChConfig
+
+import traceback
+import os
+
+#逻辑实现(这里curPlayer = None)
+## 执行逻辑
+# @param curPlayer 当前玩家 None
+# @param gmList [cmdIndex,gmAccID,forbidAccIP]
+# @return None
+# @remarks 函数详细说明.
+def OnExec(orderId, gmCmdDict):
+ queryType = gmCmdDict.get(GMCommon.Def_GMKey_QueryType, '')
+ playerFind = gmCmdDict.get(GMCommon.Def_GMKey_PlayerFind, '')
+ cmdInfo = gmCmdDict.get('cmdInfo', '')
+ if not cmdInfo:
+ GMCommon.GMCommandResult(orderId, gmCmdDict, GMCommon.Def_ParamErr)
+ return
+
+ if playerFind:
+
+ if queryType == GMCommon.Def_GMKey_PlayerAccID:
+ queryType = ChConfig.queryType_sqtPlayerByAccID
+
+ elif queryType == GMCommon.Def_GMKey_PlayerName:
+ queryType = ChConfig.queryType_sqtPlayerByName
+
+ GMCommon.GMTool_MapServer_Query(queryType, orderId, playerFind, gmCmdDict, "GMTExecfile", [orderId, cmdInfo], False)
+ return
+
+ backDir = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
+
+ execfilepath = os.path.join(backDir, "GMTExec\\%s.py" % cmdInfo)
+
+ GameWorld.Log("GMT_Execfile: %s" % execfilepath)
+
+ if not os.path.exists(execfilepath):
+ GMCommon.GMCommandResult(orderId, gmCmdDict, GMCommon.Def_ParamErr, "%s is not exists!" % cmdInfo)
+ return
+
+ resultDict = {"cmdInfo":cmdInfo}
+
+ try:
+ execfile(execfilepath, globals(), locals())
+ except:
+ errMsg = traceback.format_exc()
+ GameWorld.ErrLog(errMsg)
+
+ resultDict["errMsg"] = errMsg
+ GMCommon.GMCommandResult(orderId, gmCmdDict, GMCommon.Def_Unknow, resultDict)
+ return
+
+ DataRecordPack.DR_ToolGMOperate(0, "", "", "GMT_Execfile", resultDict)
+ GMCommon.GMCommandResult(orderId, gmCmdDict, GMCommon.Def_Success, resultDict)
+ return
+
+
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GM/GMTExec/Test.py b/ServerPython/CoreServerGroup/GameServer/Script/GM/GMTExec/Test.py
new file mode 100644
index 0000000..16d81e4
--- /dev/null
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GM/GMTExec/Test.py
@@ -0,0 +1,47 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Script.GM.GMTExec.Test
+#
+# @todo:测试命令文件运行
+# @author hxp
+# @date 2021-05-19
+# @version 1.0
+#
+# 详细描述: 测试命令文件运行
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2021-05-19 11:00"""
+#-------------------------------------------------------------------------------
+
+def runMyTest(exec_locals):
+ ''' 运行命令函数
+ @param exec_locals: GMT_Execfile 模块中的 DoLogic 函数 locals()
+
+ import 其他模块需要写在此函数里,不然无法引用到
+ '''
+ import GameWorld
+ orderId = exec_locals["orderId"]
+ cmdInfo = exec_locals["cmdInfo"]
+ resultDict = exec_locals["resultDict"] # 建议都进行更新结果字典记录详细处理信息,GMT_Execfile 模块会统一写入流向
+
+ # 以下为详细处理逻辑
+ GameWorld.Log("This is GameServer GMT_Execfile run %s. orderId=%s" % (cmdInfo, orderId))
+
+ activePlayerIDList = []
+ playerManager = GameWorld.GetPlayerManager()
+ activePlayerCount = playerManager.GetActivePlayerCount()
+ for index in xrange(activePlayerCount):
+ player = playerManager.GetActivePlayerAt(index)
+ if player == None or not player.GetInitOK():
+ continue
+ activePlayerIDList.append(player.GetPlayerID())
+
+ resultDict.update({"activePlayerIDList":activePlayerIDList})
+ return
+
+exec_locals = locals()
+if exec_locals.get("cmdInfo"):
+ runMyTest(exec_locals)
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/GMCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/GMCommon.py
index 90c1c76..667abfe 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/GMCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/GMCommon.py
@@ -21,6 +21,7 @@
#---------------------------------------------------------------------
import IPY_GameWorld
+import GameWorld
#------------------------------------------------------------------------------
#gm工具返回结果类型
@@ -89,3 +90,7 @@
return buffTypeList
+def SendGMTResult(orderId, pack_type, result=Def_Success, retMsg=None):
+ resultMsg = str([orderId, retMsg, pack_type, result])
+ GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'GMToolResult', resultMsg, len(resultMsg))
+ return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GMTExec/Test.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GMTExec/Test.py
new file mode 100644
index 0000000..4c641b0
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GMTExec/Test.py
@@ -0,0 +1,41 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Script.Player.RemoteQuery.GMTExec.Test
+#
+# @todo:测试命令文件运行
+# @author hxp
+# @date 2021-05-19
+# @version 1.0
+#
+# 详细描述: 测试命令文件运行
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2021-05-19 11:00"""
+#-------------------------------------------------------------------------------
+
+
+def runMyTest(exec_locals):
+ ''' 运行命令函数
+ @param exec_locals: GY_Query_GMTExecfile 模块中的 DoLogic 函数 locals()
+
+ import 其他模块需要写在此函数里,不然无法引用到
+ '''
+ import GameWorld
+
+ orderId = exec_locals["orderId"]
+ cmdInfo = exec_locals["cmdInfo"]
+ curPlayer = exec_locals["curPlayer"]
+ resultDict = exec_locals["resultDict"] # 建议都进行更新结果字典记录详细处理信息,GY_Query_GMTExecfile 模块会统一写入流向
+
+ # 以下为详细处理逻辑
+
+ GameWorld.Log("This is MameServer GMT_Execfile run %s. orderId=%s" % (cmdInfo, orderId), curPlayer.GetPlayerID())
+ resultDict.update({"LV":curPlayer.GetLV(), "PlayerID":curPlayer.GetPlayerID()})
+ return
+
+exec_locals = locals()
+if exec_locals.get("cmdInfo"):
+ runMyTest(exec_locals)
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_GMTExecfile.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_GMTExecfile.py
new file mode 100644
index 0000000..b125a42
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_GMTExecfile.py
@@ -0,0 +1,91 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Player.RemoteQuery.GY_Query_GMTExecfile
+#
+# @todo:执行命令文件
+# @author hxp
+# @date 2021-05-19
+# @version 1.0
+#
+# 详细描述: 执行命令文件
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2021-05-19 11:00"""
+#-------------------------------------------------------------------------------
+
+import DataRecordPack
+import GameWorld
+import GMCommon
+
+import traceback
+import os
+
+
+#逻辑实现
+## 请求逻辑
+# @param query_Type 请求类型
+# @param query_ID 玩家ID
+# @param packCMDList 发包命令
+# @param tick 当前时间
+# @return "True" or "False" or ""
+# @remarks 函数详细说明.
+def DoLogic(query_Type, query_ID, packCMDList, tick):
+ curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(query_ID)
+
+ if not curPlayer or curPlayer.IsEmpty():
+ return
+
+ pack_type = "GMT_Execfile"
+ result = GMCommon.Def_Success
+
+ orderId, cmdInfo = packCMDList
+
+ backDir = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
+
+ execfilepath = os.path.join(backDir, "GMTExec\\%s.py" % cmdInfo)
+
+ GameWorld.Log("GMT_Execfile: %s" % execfilepath)
+
+ if not os.path.exists(execfilepath):
+ GMCommon.SendGMTResult(orderId, pack_type, GMCommon.Def_ParamErr, "%s is not exists!" % cmdInfo)
+ return
+
+ mapID = GameWorld.GetMap().GetMapID()
+ resultDict = {"cmdInfo":cmdInfo, "mapID":mapID}
+
+ try:
+ execfile(execfilepath, globals(), locals())
+ except:
+ errMsg = traceback.format_exc()
+ GameWorld.ErrLog(errMsg)
+
+ resultDict["errMsg"] = errMsg
+ GMCommon.SendGMTResult(orderId, pack_type, GMCommon.Def_Unknow, resultDict)
+ return
+
+ DataRecordPack.DR_ToolGMOperate(query_ID, curPlayer.GetPlayerName(), curPlayer.GetAccID(), pack_type, resultDict)
+ GMCommon.SendGMTResult(orderId, pack_type, GMCommon.Def_Success, resultDict)
+ return
+
+
+#执行结果
+## 执行结果
+# @param curPlayer 发出请求的玩家
+# @param callFunName 功能名称
+# @param funResult 查询的结果
+# @param tick 当前时间
+# @return None
+# @remarks 函数详细说明.
+def DoResult(curPlayer, callFunName, funResult, tick):
+ return
+
+
+
+
+
+
+
+
+
--
Gitblit v1.8.0