| | |
| | | import Commands
|
| | | import IPY_GameWorld
|
| | | import DataRecordPack
|
| | | import ChServerToServerPyPack
|
| | | import NetPackCommon
|
| | | import PlayerControl
|
| | | import ReadChConfig
|
| | | import traceback
|
| | | import FBLogic
|
| | | import GameObj
|
| | | import CrossMsg
|
| | | import ShareDefine
|
| | | import CrossPlayer
|
| | | #---------------------------------------------------------------------
|
| | |
| | | continue
|
| | | inputList[i] = value
|
| | |
|
| | | if GameWorld.IsMainServer():
|
| | | callFunc = GameWorld.GetExecFunc(Commands, "%s.%s"%(callFunName, "GetGMServerIDList"))
|
| | | if callFunc != None:
|
| | | gmServerIDList = callFunc(curPlayer)
|
| | | if gmServerIDList:
|
| | | CrossMsg.SendToCrossServer(ShareDefine.S2C_GMCMD, {"CMD":inputList}, gmServerIDList, curPlayer.GetPlayerID())
|
| | | |
| | | |
| | | callFunc = GameWorld.GetExecFunc(Commands, "%s.%s"%(callFunName, "OnExec"))
|
| | | if callFunc:
|
| | | #删除命令,只将参数传入
|
| | | callFunc(curPlayer, inputList[1:])
|
| | | DR_UseGMCMD(curPlayer, 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函数
|
| | |
| | | # raise Exception(errorMsg)
|
| | | return
|
| | |
|
| | | def S2C_GMCMD(dataMsg, fromServerID, playerID):
|
| | | cmdList = dataMsg["CMD"]
|
| | | |
| | | callName = "%s.%s" % (cmdList[0], "OnExecCross")
|
| | | callFunc = GameWorld.GetExecFunc(Commands, callName)
|
| | | if callFunc == None:
|
| | | GameWorld.ErrLog("找不到此GM命令处理函数%s" % callName)
|
| | | return
|
| | | GameWorld.Log("跨服执行GM命令:%s" % cmdList)
|
| | | |
| | | #// 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:
|
| | | crossPlayer = CrossPlayer.GetCrossPlayerMgr().RegistPlayer(playerID)
|
| | | |
| | | #只将实际参数传入
|
| | | callFunc(crossPlayer, cmdList[1:])
|
| | | GameWorld.ErrLog("本服找不到crossPlayer!", playerID)
|
| | | return
|
| | | cmdList = eval(cmdStr)
|
| | | callFunName = cmdList[0]
|
| | | callName = "%s.%s" % (callFunName, "OnExecCross")
|
| | | 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命令流向
|