コード例 #1
0
ファイル: LordControl.cs プロジェクト: viticm/pap2
		/// <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;
        }
コード例 #2
0
ファイル: LordControl.cs プロジェクト: uvbs/FullSource
        /// <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);
        }