/// <summary> /// 执行GM指令 /// </summary> /// <param name="playerName">执行GM指令的玩家名字,不能为null</param> /// <param name="isAccountName">玩家名字是否为账号名,若值为true则是账号名,若值为false则是角色名</param> /// <param name="command">GM指令内容,不能为null</param> /// <param name="isExecutedByGameServer">该GM指令是否直接发给GS执行,若值为true则发给GS,若值为false则不发给GS</param> /// <param name="gameServerArrayList">如果isExecutedByGameServer为true,则这里就是要发给的GS的编号列表,可以为null</param> bool ExecuteGMCommand(int userId,string playerName, bool isAccountName, string command, bool isExecutedByGameServer, ArrayList gameServerArrayList, ref object outArg) { if (playerName == null) throw new ArgumentNullException("playerName"); if (command == null) throw new ArgumentNullException("command"); bool result = false; User user = AdminServer.TheInstance.SecurityManager.GetUser(userId); if (_server.IsConnected && _server.GameServiceState == GameServer.ServiceState.Running) { e2l_ExeGMCmd protocol = new e2l_ExeGMCmd(); //if (playerName != String.Empty) //{ // protocol.PlayerName = playerName; // protocol.GCorGS = 1; // protocol.RoleOrAccount = 0; //} //else //{ // protocol.PlayerName = ""; // protocol.GCorGS = 0; // protocol.RoleOrAccount = 0; //} protocol.PlayerName = playerName; protocol.RoleOrAccount = Convert.ToUInt16(isAccountName); protocol.Command = command; protocol.GCorGS = Convert.ToUInt16(isExecutedByGameServer); if ((gameServerArrayList != null) && (gameServerArrayList.Count > 0)) protocol.GSList = gameServerArrayList; //生成sessionId,并传给引用参数 uint id = 0; lock (_syncRoot) { id = _GMCount; _GMCount++; } protocol.nSessionID = id; protocol.wServer = (ushort)_server.Id; outArg = id; result = _server.SendMessage(protocol); //更新_GMResultIndexByUserId if (result) { lock (_GMResultIndexByUserId.SyncRoot) { if (_GMResultIndexByUserId.Contains(userId) == false) { _GMResultIndexByUserId.Add(userId, id); } else { int oldId = (int)_GMResultIndexByUserId[userId]; if (_GMResultCache.Contains(oldId)) _GMResultCache.Remove(oldId); _GMResultIndexByUserId[userId] = id; } } } } Security.LogSystem.TheInstance.WriteLog(userId, OpType.EXECUTE, _server.Id, string.Format(StringDef.LogMessageExecuteGMCommand, user == null ? userId.ToString() : user.UserName, _server.Name, playerName == null || playerName.Length == 0 ? string.Empty : string.Format("[{0}]", playerName), command, result ? StringDef.Success : StringDef.Fail) ); return result; }
/// <summary> /// 执行GM指令 /// </summary> /// <param name="playerName">执行GM指令的玩家名字,不能为null</param> /// <param name="isAccountName">玩家名字是否为账号名,若值为true则是账号名,若值为false则是角色名</param> /// <param name="command">GM指令内容,不能为null</param> /// <param name="isExecutedByGameServer">该GM指令是否直接发给GS执行,若值为true则发给GS,若值为false则不发给GS</param> /// <param name="gameServerArrayList">如果isExecutedByGameServer为true,则这里就是要发给的GS的编号列表,可以为null</param> bool ExecuteGMCommand(int userId, string playerName, bool isAccountName, string command, bool isExecutedByGameServer, ArrayList gameServerArrayList, ref object outArg) { if (playerName == null) { throw new ArgumentNullException("playerName"); } if (command == null) { throw new ArgumentNullException("command"); } bool result = false; User user = AdminServer.TheInstance.SecurityManager.GetUser(userId); if (_server.IsConnected && _server.GameServiceState == GameServer.ServiceState.Running) { e2l_ExeGMCmd protocol = new e2l_ExeGMCmd(); //if (playerName != String.Empty) //{ // protocol.PlayerName = playerName; // protocol.GCorGS = 1; // protocol.RoleOrAccount = 0; //} //else //{ // protocol.PlayerName = ""; // protocol.GCorGS = 0; // protocol.RoleOrAccount = 0; //} protocol.PlayerName = playerName; protocol.RoleOrAccount = Convert.ToUInt16(isAccountName); protocol.Command = command; protocol.GCorGS = Convert.ToUInt16(isExecutedByGameServer); if ((gameServerArrayList != null) && (gameServerArrayList.Count > 0)) { protocol.GSList = gameServerArrayList; } //生成sessionId,并传给引用参数 uint id = 0; lock (_syncRoot) { id = _GMCount; _GMCount++; } protocol.nSessionID = id; protocol.wServer = (ushort)_server.Id; outArg = id; result = _server.SendMessage(protocol); //更新_GMResultIndexByUserId if (result) { lock (_GMResultIndexByUserId.SyncRoot) { if (_GMResultIndexByUserId.Contains(userId) == false) { _GMResultIndexByUserId.Add(userId, id); } else { int oldId = (int)_GMResultIndexByUserId[userId]; if (_GMResultCache.Contains(oldId)) { _GMResultCache.Remove(oldId); } _GMResultIndexByUserId[userId] = id; } } } } Security.LogSystem.TheInstance.WriteLog(userId, OpType.EXECUTE, _server.Id, string.Format(StringDef.LogMessageExecuteGMCommand, user == null ? userId.ToString() : user.UserName, _server.Name, playerName == null || playerName.Length == 0 ? string.Empty : string.Format("[{0}]", playerName), command, result ? StringDef.Success : StringDef.Fail) ); return(result); }