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 }); } } }
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 }); } } }
/// <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); }