|  |  |  | 
|---|
|  |  |  | import GameWorld | 
|---|
|  |  |  | import Commands | 
|---|
|  |  |  | import IPY_GameServer | 
|---|
|  |  |  | import MergeChildMsg | 
|---|
|  |  |  | import CrossRealmMsg | 
|---|
|  |  |  | import PyGameData | 
|---|
|  |  |  | import traceback | 
|---|
|  |  |  | import GMCommon | 
|---|
|  |  |  | import ShareDefine | 
|---|
|  |  |  | import os | 
|---|
|  |  |  | #--------------------------------------------------------------------- | 
|---|
|  |  |  | g_broadCastList = [] | 
|---|
|  |  |  | 
|---|
|  |  |  | GameWorld.Log("###使用GM命令 = %s错误,玩家不是GM"%(callFunName), curPlayer.GetPlayerID()) | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #非跨服服务器下使用跨服专属GM命令,则发送到跨服 | 
|---|
|  |  |  | if not GameWorld.IsMergeServer(): | 
|---|
|  |  |  | #把剩余参数转换为整型 | 
|---|
|  |  |  | for i in range(0, len(alist)): | 
|---|
|  |  |  | if i == 0: | 
|---|
|  |  |  | continue | 
|---|
|  |  |  | value = GameWorld.ToIntDef(alist[i], None) | 
|---|
|  |  |  | if value == None: | 
|---|
|  |  |  | #GameWorld.DebugAnswer(curPlayer, "参数错误, 参数%s必须为纯数字!" % (i + 1)) | 
|---|
|  |  |  | continue | 
|---|
|  |  |  | alist[i] = value | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #非跨服服务器下使用跨服GM命令,则发送到跨服 | 
|---|
|  |  |  | if not GameWorld.IsCrossServer(): | 
|---|
|  |  |  | callFunc = GameWorld.GetExecFunc(Commands, "%s.%s"%(callFunName, "OnGetMergeParam")) | 
|---|
|  |  |  | if callFunc != None: | 
|---|
|  |  |  | extendParamList = callFunc(curPlayer) | 
|---|
|  |  |  | alist.extend(extendParamList) | 
|---|
|  |  |  | MergeChildMsg.SendMergerChildToCenterStringData(ChConfig.Def_SendGMCMD, alist) | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | CrossRealmMsg.SendMsgToCrossServer(ShareDefine.ClientServerMsg_GMCMD, alist + extendParamList) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | callFunc = GameWorld.GetExecFunc(Commands, "%s.%s"%(callFunName, "OnExec")) | 
|---|
|  |  |  | if callFunc == None: | 
|---|
|  |  |  | #没有此命令 | 
|---|
|  |  |  | 
|---|
|  |  |  | GameWorld.DebugAnswer(curPlayer, 'no cmd !!!') | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #删除命令,只将参数传入 | 
|---|
|  |  |  | del alist[0] | 
|---|
|  |  |  | #把剩余参数转换为整型 | 
|---|
|  |  |  | for i in range(0, len(alist)): | 
|---|
|  |  |  | if not alist[i].isdigit(): | 
|---|
|  |  |  | continue | 
|---|
|  |  |  | value = GameWorld.ToIntDef(alist[i], None) | 
|---|
|  |  |  | if value == None: | 
|---|
|  |  |  | GameWorld.DebugAnswer(curPlayer, "参数错误, 参数%s必须为纯数字!" % (i + 1)) | 
|---|
|  |  |  | return | 
|---|
|  |  |  | alist[i] = value | 
|---|
|  |  |  |  | 
|---|
|  |  |  | callFunc(curPlayer,alist) | 
|---|
|  |  |  | callFunc(curPlayer, alist[1:]) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | except BaseException: | 
|---|
|  |  |  | GameWorld.DebugAnswer(curPlayer, "执行GM命令错误, 请查看GameServer日志!") | 
|---|
|  |  |  | 
|---|
|  |  |  | callFunc(orderId, cmdDict) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | except BaseException: | 
|---|
|  |  |  | GameWorld.Log('GM命令错误 - > %s'%(traceback.format_exc())) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | GMCommon.GMCommandResult(orderId, gmCmdDict, GMCommon.Def_GMGSEntranceFail) | 
|---|
|  |  |  | if GameWorld.GetGameWorld().GetDebugLevel(): | 
|---|
|  |  |  | raise BaseException(str(traceback.format_exc())) | 
|---|
|  |  |  | GameWorld.RaiseException('GM命令错误\r\n%s'%(traceback.format_exc())) | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return | 
|---|
|  |  |  | 
|---|
|  |  |  | return cmdDict | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ## 收到子服务器发送的GM命令 | 
|---|
|  |  |  | def ClientServer_SendGMCMD(cmdMsgList, tick): | 
|---|
|  |  |  | def ClientServerMsg_GMCMD(cmdMsgList, tick): | 
|---|
|  |  |  | if len(cmdMsgList) == 0: | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | #只将实际参数传入 | 
|---|
|  |  |  | callFunc(cmdMsgList[1:], tick) | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def AddOfflinePlayerGMTInfo(orderId, queryType, playerFind, gmCmdDict): | 
|---|
|  |  |  | # 玩家不在线,先记录,等玩家上线后处理,开关服后无效 | 
|---|
|  |  |  | key = (queryType, playerFind) | 
|---|
|  |  |  | ctgInfoList = PyGameData.g_gmtOfflinePlayerInfo.get(key, []) | 
|---|
|  |  |  | ctgInfoList.append(gmCmdDict) | 
|---|
|  |  |  | PyGameData.g_gmtOfflinePlayerInfo[key] = ctgInfoList | 
|---|
|  |  |  | GameWorld.Log("离线玩家添加GMT: g_gmtOfflinePlayerInfo=%s" % str(PyGameData.g_gmtOfflinePlayerInfo)) | 
|---|
|  |  |  | GMCommon.GMCommandResult(orderId, gmCmdDict, GMCommon.Def_Success, "Player is off line.") | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OnPlayerLogin(curPlayer): | 
|---|
|  |  |  | gmtList = [] | 
|---|
|  |  |  | nameKey = (ChConfig.queryType_sqtPlayerByName, curPlayer.GetName()) | 
|---|
|  |  |  | if nameKey in PyGameData.g_gmtOfflinePlayerInfo: | 
|---|
|  |  |  | gmtList += PyGameData.g_gmtOfflinePlayerInfo.pop(nameKey) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | accIDKey = (ChConfig.queryType_sqtPlayerByAccID, curPlayer.GetAccID()) | 
|---|
|  |  |  | if accIDKey in PyGameData.g_gmtOfflinePlayerInfo: | 
|---|
|  |  |  | gmtList += PyGameData.g_gmtOfflinePlayerInfo.pop(accIDKey) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if not gmtList: | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | tagMapID = curPlayer.GetRealMapID() | 
|---|
|  |  |  | GameWorld.Log("离线玩家上线GMT: tagMapID=%s, %s" % (tagMapID, gmtList), curPlayer.GetPlayerID()) | 
|---|
|  |  |  | if not tagMapID: | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | for gmCmdDict in gmtList: | 
|---|
|  |  |  | pack_type = gmCmdDict.get("pack_type") | 
|---|
|  |  |  | if not pack_type: | 
|---|
|  |  |  | continue | 
|---|
|  |  |  |  | 
|---|
|  |  |  | callFunc = GameWorld.GetExecFunc(Commands, "%s.%s"%(pack_type, "OnOfflineCTGInfo")) | 
|---|
|  |  |  | if callFunc: | 
|---|
|  |  |  | GameWorld.Log("玩家上线执行GMT: %s, tagMapID=%s, %s" % (pack_type, tagMapID, gmCmdDict), curPlayer.GetPlayerID()) | 
|---|
|  |  |  | callFunc(curPlayer, tagMapID, gmCmdDict) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|