예제 #1
0
        /// <inheritdoc />
        public void Execute(IEntity entity, SystemEventArgs e)
        {
            if (!(e is ChatEventArgs chatEvent) || !(entity is IPlayerEntity player))
            {
                return;
            }
            if (!chatEvent.CheckArguments())
            {
                return;
            }

            if (chatEvent.Message.StartsWith("/") || chatEvent.Message.StartsWith("."))
            {
                string   commandName       = chatEvent.Message.Split(' ').FirstOrDefault();
                string[] commandParameters = GetCommandParameters(chatEvent.Message, commandName);

                if (ChatCommands.TryGetValue(commandName, out var command))
                {
                    if (player.PlayerData.Authority < command.MinAuthorization)
                    {
                        Logger.Warn(MsgUnableExecuteCmd, commandName, player.Object.Name, "player has no privileges");
                    }
                    else
                    {
                        command.Method.Invoke(player, commandParameters);
                        Logger.Info("Command '{0}' executed for player '{1}'.", commandName, player.Object.Name);
                    }
                }
                else
                {
                    Logger.Warn(MsgUnableExecuteCmd, commandName, player.Object.Name, "unknown command");
                }
            }
            else
            {
                WorldPacketFactory.SendChat(player, chatEvent.Message);
            }
        }