Beispiel #1
0
        private void RefreshCommands()
        {
            lock (_commandLocker)
            {
                Commands.Clear();
                ConsoleCommands.Clear();

                var assemblies = AppDomain.CurrentDomain.GetAssemblies();

                foreach (var assm in assemblies.Where(p => p.GetTypes().Any(x => typeof(ICSPlugin).IsAssignableFrom(x))))
                {
                    Type[] types = assm.GetTypes();

                    foreach (Type type in types)
                    {
                        foreach (MethodInfo mi in type.GetMethods())
                        {
                            var cmdAttribs        = mi.GetCustomAttributes(typeof(CommandAttribute), false).ToList();
                            var consoleCmdAttribs = mi.GetCustomAttributes(typeof(ConsoleCommandAttribute), false).ToList();

                            if (consoleCmdAttribs.Count == 1)
                            {
                                ConsoleCommandAttribute cCmdAttr = (ConsoleCommandAttribute)cmdAttribs[0];

                                ConsoleCommands.Add(cCmdAttr.CommandName, cCmdAttr.CommandDescription);
                            }
                            else if (cmdAttribs.Count == 1)
                            {
                                var permAttribs = mi.GetCustomAttributes(typeof(CommandPermissionAttribute), false).ToList();

                                CommandAttribute cmdAttrib = (CommandAttribute)cmdAttribs[0];

                                if (permAttribs.Count == 1)
                                {
                                    CommandPermissionAttribute permAttrib = (CommandPermissionAttribute)permAttribs[0];

                                    Commands.Add(Tuple.Create(cmdAttrib.CommandName, cmdAttrib.CommandDescription, permAttrib.Permission, permAttrib.Admin));
                                }
                                else
                                {
                                    Commands.Add(Tuple.Create(cmdAttrib.CommandName, cmdAttrib.CommandDescription, String.Empty, false));
                                }
                            }
                        }
                    }
                }
            }
        }
Beispiel #2
0
        public void LoadCommands(object instance)
        {
            //PluginManager.LoadCommands(instance);

            var type    = instance.GetType();
            var methods = type.GetMethods();

            foreach (MethodInfo method in methods)
            {
                CommandAttribute commandAttribute = Attribute.GetCustomAttribute(method, typeof(CommandAttribute), false) as CommandAttribute;
                if (commandAttribute == null)
                {
                    continue;
                }

                if (string.IsNullOrEmpty(commandAttribute.Name))
                {
                    commandAttribute.Name = method.Name;
                }

                DescriptionAttribute descriptionAttribute = Attribute.GetCustomAttribute(method, typeof(DescriptionAttribute), false) as DescriptionAttribute;
                if (descriptionAttribute != null)
                {
                    commandAttribute.Description = descriptionAttribute.Description;
                }

                CommandPermissionAttribute permissionAttribute = Attribute.GetCustomAttribute(method, typeof(CommandPermissionAttribute), true) as CommandPermissionAttribute;

                // Overwrite custom permissions if command permission is supplied
                if (!string.IsNullOrEmpty(commandAttribute.Permission))
                {
                    permissionAttribute = new StringPermissionAttribute(commandAttribute.Permission);
                }

                try
                {
                    _pluginCommands.Add(method, new CommandData(commandAttribute, instance, permissionAttribute));
                }
                catch (ArgumentException e)
                {
                    Log.Debug($"Command already exist {method.Name}, {method}", e);
                }
            }
        }
Beispiel #3
0
 public CommandData(CommandAttribute attribute, object instance, CommandPermissionAttribute permissionAttribute)
 {
     Attribute           = attribute;
     Instance            = instance;
     PermissionAttribute = permissionAttribute;
 }
Beispiel #4
0
 public abstract bool HasPermission(CommandPermissionAttribute attr, OpenPlayer player);