コード例 #1
0
        public static void Handle(ClientMessage clientMessage, Session session)
        {
            var message = clientMessage.Payload.ReadString16L();

            if (message.StartsWith("@"))
            {
                string   command;
                string[] parameters;
                CommandManager.ParseCommand(message.Remove(0, 1), out command, out parameters);

                CommandHandlerInfo commandHandler;
                var response = CommandManager.GetCommandHandler(session, command, parameters, out commandHandler);
                if (response == CommandHandlerResponse.Ok)
                {
                    ((CommandHandler)commandHandler.Handler).Invoke(session, parameters);
                }
                else if (response == CommandHandlerResponse.SudoOk)
                {
                    string[] sudoParameters = new string[parameters.Length - 1];
                    for (int i = 1; i < parameters.Length; i++)
                    {
                        sudoParameters[i - 1] = parameters[i];
                    }

                    ((CommandHandler)commandHandler.Handler).Invoke(session, sudoParameters);
                }
                else
                {
                    switch (response)
                    {
                    case CommandHandlerResponse.InvalidCommand:
                        session.Network.EnqueueSend(new GameMessageSystemChat($"Unknown command: {command}", ChatMessageType.Help));
                        break;

                    case CommandHandlerResponse.InvalidParameterCount:
                        session.Network.EnqueueSend(new GameMessageSystemChat($"Invalid parameter count, got {parameters.Length}, expected {commandHandler.Attribute.ParameterCount}!", ChatMessageType.Help));
                        session.Network.EnqueueSend(new GameMessageSystemChat($"@{commandHandler.Attribute.Command} - {commandHandler.Attribute.Description}", ChatMessageType.Broadcast));
                        session.Network.EnqueueSend(new GameMessageSystemChat($"Usage: @{commandHandler.Attribute.Command} {commandHandler.Attribute.Usage}", ChatMessageType.Broadcast));
                        break;

                    default:
                        break;
                    }
                }
            }
            else
            {
                var creatureMessage = new GameMessageCreatureMessage(message, session.Player.Name, session.Player.Guid.Full, ChatMessageType.Speech);

                // TODO: This needs to be changed to a different method. GetByRadius or GetNear, however we decide to do proximity updates...
                var targets = WorldManager.GetAll();

                foreach (var target in targets)
                {
                    target.Network.EnqueueSend(new GameMessage[] { creatureMessage });
                }
            }
        }
コード例 #2
0
        public override void Handle()
        {
            if (message.StartsWith("@"))
            {
                string   command;
                string[] parameters;
                CommandManager.ParseCommand(message.Remove(0, 1), out command, out parameters);

                CommandHandlerInfo commandHandler;
                var response = CommandManager.GetCommandHandler(Session, command, parameters, out commandHandler);
                if (response == CommandHandlerResponse.Ok)
                {
                    ((CommandHandler)commandHandler.Handler).Invoke(Session, parameters);
                }
                else if (response == CommandHandlerResponse.SudoOk)
                {
                    string[] sudoParameters = new string[parameters.Length - 1];
                    for (int i = 1; i < parameters.Length; i++)
                    {
                        sudoParameters[i - 1] = parameters[i];
                    }

                    ((CommandHandler)commandHandler.Handler).Invoke(Session, sudoParameters);
                }
                else
                {
                    switch (response)
                    {
                    case CommandHandlerResponse.InvalidCommand:
                        ChatPacket.SendServerMessage(Session, $"Invalid command {command}!", ChatMessageType.Broadcast);
                        break;

                    case CommandHandlerResponse.InvalidParameterCount:
                        ChatPacket.SendServerMessage(Session, $"Invalid parameter count, got {parameters.Length}, expected {commandHandler.Attribute.ParameterCount}!", ChatMessageType.Broadcast);
                        break;

                    default:
                        break;
                    }
                }
            }
            else
            {
                var creatureMessage = new GameMessageCreatureMessage(message, Session.Player.Name, Session.Player.Guid.Full, ChatMessageType.Speech);

                // TODO: This needs to be changed to a different method. GetByRadius or GetNear, however we decide to do proximity updates...
                var targets = WorldManager.GetAll();

                foreach (var target in targets)
                {
                    target.WorldSession.EnqueueSend(new GameMessage[] { creatureMessage });
                }
            }
        }
コード例 #3
0
ファイル: Landblock.cs プロジェクト: derandark/ACE
        /// <summary>
        /// Convenience wrapper to EnqueueBroadcast to broadcast local chat.
        /// </summary>
        /// <param name="wo"></param>
        /// <param name="message"></param>
        public void EnqueueBroadcastLocalChat(WorldObject wo, string message)
        {
            // wo must exist on us
            if (wo.CurrentLandblock != this)
            {
                log.Error("ERROR: Broadcasting chat from object not on our landblock");
            }

            GameMessageCreatureMessage creatureMessage = new GameMessageCreatureMessage(message, wo.Name, wo.Guid.Full, ChatMessageType.Speech);

            EnqueueBroadcast(wo.Location, MaxObjectRange, creatureMessage);
        }