| | |
| | | import Commands
|
| | | import IPY_GameWorld
|
| | | import DataRecordPack
|
| | | import ChServerToServerPyPack
|
| | | import NetPackCommon
|
| | | import PlayerControl
|
| | | import ReadChConfig
|
| | | import traceback
|
| | | import FBLogic
|
| | | import GameObj
|
| | | import ShareDefine
|
| | | import CrossPlayer
|
| | | #---------------------------------------------------------------------
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | |
| | | GameWorld.ImportAll("Script\\GM\\" , "Commands")
|
| | | GameWorld.ImportAll("Script\\GM\\" , "")
|
| | |
|
| | | TestPlatformList = ["test", "yun"]
|
| | | #---------------------------------------------------------------------
|
| | | ## 重新导入GM全部命令
|
| | | # @param tick 当前时间
|
| | |
| | | # curIP = curPlayer.GetIP()
|
| | | # if (curIP.find('10.30.') == 0 or curIP.find('192.168.') == 0) and playerPF == "173on_lan":
|
| | | #测试修改
|
| | | if playerPF in TestPlatformList:
|
| | | if GameWorld.IsTestPlatform(playerPF):
|
| | | curPlayer.SetGMLevel(gmLV)
|
| | | GameWorld.DebugAnswer(curPlayer, "SetGMLevel %s" % gmLV)
|
| | | else:
|
| | |
| | |
|
| | | #验证权限失败
|
| | | elif not CheckGMLV(curPlayer , callFunName):
|
| | | GameWorld.DebugAnswer(curPlayer, 'GM等级不足!')
|
| | | return
|
| | | |
| | | #把剩余参数转换为整型
|
| | | for i in range(1, len(inputList)):
|
| | | value = GameWorld.ToNumDef(inputList[i], None)
|
| | | if value == None:
|
| | | #GameWorld.DebugAnswer(curPlayer, "参数错误, 必须为纯数字!")
|
| | | continue
|
| | | inputList[i] = value
|
| | |
|
| | | |
| | | callFunc = GameWorld.GetExecFunc(Commands, "%s.%s"%(callFunName, "OnExec"))
|
| | | if callFunc:
|
| | | #删除命令,只将参数传入
|
| | | del inputList[0]
|
| | | #把剩余参数转换为整型
|
| | | for i in range(0, len(inputList)):
|
| | | value = GameWorld.ToNumDef(inputList[i], None)
|
| | | if value == None:
|
| | | #GameWorld.DebugAnswer(curPlayer, "参数错误, 必须为纯数字!")
|
| | | continue
|
| | | inputList[i] = value
|
| | | |
| | | isSendGameServer = callFunc(curPlayer, inputList)
|
| | | #删除命令,只将参数传入 |
| | | callFunc(curPlayer, inputList[1:])
|
| | | DR_UseGMCMD(curPlayer, inputStr)
|
| | | if isSendGameServer:
|
| | | curPlayer.GameServer_GMCmd(inputStr)
|
| | | |
| | | # 检查是否额外发给其他跨服服务器
|
| | | if GameWorld.IsMainServer():
|
| | | callFunc = GameWorld.GetExecFunc(Commands, "%s.%s"%(callFunName, "GetGMServerIDList"))
|
| | | if callFunc != None:
|
| | | gmServerIDList = callFunc(curPlayer)
|
| | | pack = ChServerToServerPyPack.tagSSGMCMD()
|
| | | pack.FromServerID = GameWorld.GetGameWorld().GetServerID()
|
| | | pack.ServerType = GameWorld.GetServerType()
|
| | | pack.PlayerID = curPlayer.GetPlayerID()
|
| | | pack.CMDStr = str(inputList)
|
| | | pack.CMDLen = len(pack.CMDStr)
|
| | | NetPackCommon.SendCrossServerToServerPack(pack, gmServerIDList, dirType=ShareDefine.dirType_Cross)
|
| | | return
|
| | |
|
| | | # GameObj 的 Get、Set函数
|
| | |
| | | DR_UseGMCMD(curPlayer, inputStr)
|
| | | return
|
| | |
|
| | | curPlayer.GameServer_GMCmd(inputStr)
|
| | | #没有此命令
|
| | | GameWorld.Log("###使用GM命令 = %s, 没有该命令!" % callFunName, curPlayer.GetPlayerID())
|
| | | GameWorld.DebugAnswer(curPlayer, 'no cmd !!!')
|
| | | except BaseException:
|
| | | GameWorld.DebugAnswer(curPlayer, "执行GM命令错误, 请查看所在地图日志!")
|
| | | errorMsg = str(traceback.format_exc())
|
| | | GameWorld.ErrLog('GM命令错误 - > %s' % errorMsg, curPlayer.GetPlayerID())
|
| | | #if GameWorld.GetGameWorld().GetDebugLevel():
|
| | | # raise Exception(errorMsg)
|
| | | return
|
| | |
|
| | | #// C2 04 跨服GM命令 #tagSSGMCMD
|
| | | #
|
| | | #struct tagSSGMCMD
|
| | | #{
|
| | | # tagHead Head;
|
| | | # DWORD FromServerID; //哪个服发的
|
| | | # BYTE ServerType; //服务器类型
|
| | | # DWORD PlayerID; //哪个玩家触发发送的
|
| | | # BYTE CMDLen;
|
| | | # char CMDStr[CMDLen];
|
| | | #};
|
| | | def OnSSGMCMD(netPack):
|
| | | fromServerID = netPack.FromServerID
|
| | | playerID = netPack.PlayerID
|
| | | cmdStr = netPack.CMDStr
|
| | | GameWorld.Log("OnSSGMCMD cmdStr=%s,fromServerID=%s" % (cmdStr, fromServerID), playerID)
|
| | | crossPlayer = CrossPlayer.GetCrossPlayerMgr().FindCrossPlayer(playerID)
|
| | | if not crossPlayer:
|
| | | GameWorld.ErrLog("本服找不到crossPlayer!", playerID)
|
| | | return
|
| | | cmdList = eval(cmdStr)
|
| | | callFunName = cmdList[0]
|
| | | callName = "%s.%s" % (callFunName, "OnExec")
|
| | | callFunc = GameWorld.GetExecFunc(Commands, callName)
|
| | | if not callFunc:
|
| | | GameWorld.DebugAnswer(crossPlayer, "找不到该跨服命令! %s" % callName)
|
| | | return
|
| | | try:
|
| | | #只将实际参数传入
|
| | | callFunc(crossPlayer, cmdList[1:])
|
| | | except BaseException:
|
| | | GameWorld.DebugAnswer(crossPlayer, "跨服执行GM命令错误!serverID=%s" % GameWorld.GetGameWorld().GetServerID())
|
| | | errorMsg = str(traceback.format_exc())
|
| | | GameWorld.ErrLog('GM命令错误 - > %s' % errorMsg, crossPlayer.GetPlayerID())
|
| | | return
|
| | |
|
| | | ## 使用GM命令流向
|
| | |
| | | if curPlayer_GMLV == 90:
|
| | | #内部测试人员,不限制
|
| | | return True
|
| | | |
| | | GMLVPowerDict = ReadChConfig.GetEvalChConfig("GMLVPower")
|
| | | if curPlayer_GMLV in GMLVPowerDict:
|
| | | powerList = GMLVPowerDict[curPlayer_GMLV]
|
| | | if not powerList or callFunName in powerList:
|
| | | return True
|
| | | |
| | | #验证权限
|
| | | if callFunName in ChConfig.Def_GMPower_Disc:
|
| | | gmPowerList = ChConfig.Def_GMPower_Disc[callFunName]
|
| | | |
| | | if curPlayer_GMLV not in gmPowerList:
|
| | | #GM等级异常
|
| | | GameWorld.Log("###使用GM命令 = %s,GM等级 = %s异常"%(callFunName , curPlayer_GMLV) , curPlayer.GetPlayerID())
|
| | | return
|
| | | |
| | | if not gmPowerList[curPlayer_GMLV]:
|
| | | GameWorld.Log("###使用GM命令 = %s,权限 = %s不足"%(callFunName , curPlayer_GMLV) , curPlayer.GetPlayerID())
|
| | | return
|
| | | |
| | | #内部测试用GM命令
|
| | | else:
|
| | | GameWorld.Log("###非内部人员, 使用调试GM命令 = %s,权限 = %s不足"%(callFunName , curPlayer_GMLV) , curPlayer.GetPlayerID())
|
| | | return
|
| | |
|
| | | return True
|
| | |
|