Beispiel #1
0
        public override void HandleAddedToManager(PluginManager manager)
        {
            foreach (var field in GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance))
            {
                var attributes = field.GetCustomAttributes(typeof(OnlinePlayersAttribute), true);
                if (attributes.Length > 0)
                {
                    var pluginField = new PluginFieldInfo(this, field);
                    if (pluginField.GenericArguments.Length != 2 || pluginField.GenericArguments[0] != typeof(BasePlayer))
                    {
                        Puts($"The {field.Name} field is not a Hash with a BasePlayer key! (online players will not be tracked)");
                        continue;
                    }
                    if (!pluginField.LookupMethod("Add", pluginField.GenericArguments))
                    {
                        Puts($"The {field.Name} field does not support adding BasePlayer keys! (online players will not be tracked)");
                        continue;
                    }
                    if (!pluginField.LookupMethod("Remove", typeof(BasePlayer)))
                    {
                        Puts($"The {field.Name} field does not support removing BasePlayer keys! (online players will not be tracked)");
                        continue;
                    }
                    if (pluginField.GenericArguments[1].GetField("Player") == null)
                    {
                        Puts($"The {pluginField.GenericArguments[1].Name} class does not have a public Player field! (online players will not be tracked)");
                        continue;
                    }
                    if (!pluginField.HasValidConstructor(typeof(BasePlayer)))
                    {
                        Puts($"The {field.Name} field is using a class which contains no valid constructor (online players will not be tracked)");
                        continue;
                    }
                    onlinePlayerFields.Add(pluginField);
                }
            }

            foreach (var method in GetType().GetMethods(BindingFlags.NonPublic | BindingFlags.Instance))
            {
                var attributes = method.GetCustomAttributes(typeof(ConsoleCommandAttribute), true);
                if (attributes.Length > 0)
                {
                    var attribute = attributes[0] as ConsoleCommandAttribute;
                    if (attribute != null) cmd.AddConsoleCommand(attribute.Command, this, method.Name);
                    continue;
                }

                attributes = method.GetCustomAttributes(typeof(ChatCommandAttribute), true);
                if (attributes.Length > 0)
                {
                    var attribute = attributes[0] as ChatCommandAttribute;
                    if (attribute != null) cmd.AddChatCommand(attribute.Command, this, method.Name);
                }
            }

            if (onlinePlayerFields.Count > 0) foreach (var player in BasePlayer.activePlayerList) AddOnlinePlayer(player);

            base.HandleAddedToManager(manager);
        }
Beispiel #2
0
 static Analytics()
 {
     Analytics.Webrequests   = Interface.Oxide.GetLibrary <WebRequests>(null);
     Analytics.PluginManager = Interface.Oxide.RootPluginManager;
     Analytics.Covalence     = Interface.Oxide.GetLibrary <Oxide.Core.Libraries.Covalence.Covalence>(null);
     Analytics.Lang          = Interface.Oxide.GetLibrary <Oxide.Core.Libraries.Lang>(null);
     Analytics.Identifier    = string.Format("{0}:{1}", Analytics.Covalence.Server.Address, Analytics.Covalence.Server.Port);
 }
Beispiel #3
0
        /// <summary>
        /// Called when this plugin has been added to the specified manager
        /// </summary>
        /// <param name="manager"></param>
        public override void HandleAddedToManager(PluginManager manager)
        {
            // Call base
            base.HandleAddedToManager(manager);

            // Subscribe all our hooks
            foreach (string key in Globals)
                Subscribe(key);

            // Add us to the watcher
            watcher.AddMapping(Name);

            // Let the plugin know that it's loading
            CallFunction("Init", null);
        }
        public override void HandleAddedToManager(PluginManager manager)
        {
            foreach (FieldInfo field in GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance))
            {
                var attributes = field.GetCustomAttributes(typeof(OnlinePlayersAttribute), true);
                if (attributes.Length > 0)
                {
                    var plugin_field = new PluginFieldInfo(this, field);
                    if (plugin_field.GenericArguments.Length != 2 || plugin_field.GenericArguments[0] != typeof(Player))
                    {
                        Puts("[{0}] The {1} field is not a Hash with a Player key! (online players will not be tracked)", Name, field.Name);
                        continue;
                    }
                    if (!plugin_field.LookupMethod("Add", plugin_field.GenericArguments))
                    {
                        Puts("[{0}] The {1} field does not support adding Player keys! (online players will not be tracked)", Name, field.Name);
                        continue;
                    }
                    if (!plugin_field.LookupMethod("Remove", typeof(Player)))
                    {
                        Puts("[{0}] The {1} field does not support removing Player keys! (online players will not be tracked)", Name, field.Name);
                        continue;
                    }
                    if (plugin_field.GenericArguments[1].GetField("Player") == null)
                    {
                        Puts("[{0}] The {1} class does not have a public Player field! (online players will not be tracked)", Name, plugin_field.GenericArguments[1].Name);
                        continue;
                    }
                    onlinePlayerFields.Add(plugin_field);
                }
            }

            foreach (var method in GetType().GetMethods(BindingFlags.NonPublic | BindingFlags.Instance))
            {
                var attributes = method.GetCustomAttributes(typeof(ChatCommandAttribute), true);
                if (attributes.Length <= 0) continue;
                var attribute = attributes[0] as ChatCommandAttribute;
                cmd.AddChatCommand(attribute.Command, this, method.Name);
            }

            base.HandleAddedToManager(manager);
        }
Beispiel #5
0
        /// <summary>
        /// Called when this plugin has been added to the specified manager
        /// </summary>
        /// <param name="manager"></param>
        public override void HandleAddedToManager(PluginManager manager)
        {
            foreach (var method in GetType().GetMethods(BindingFlags.NonPublic | BindingFlags.Instance))
            {
                var commandAttribute = method.GetCustomAttributes(typeof(CommandAttribute), true);
                var permissionAttribute = method.GetCustomAttributes(typeof(PermissionAttribute), true);
                if (commandAttribute.Length <= 0) continue;

                var cmd = commandAttribute[0] as CommandAttribute;
                var perm = permissionAttribute.Length <= 0 ? null : permissionAttribute[0] as PermissionAttribute;
                if (cmd == null) continue;
                AddCovalenceCommand(cmd.Commands, perm?.Permission, (caller, command, args) =>
                {
                    method.Invoke(this, new object[] { caller, command, args });
                    return true;
                });
            }

            base.HandleAddedToManager(manager);
        }
Beispiel #6
0
        public override void HandleAddedToManager(PluginManager manager)
        {
            foreach (var method in GetType().GetMethods(BindingFlags.NonPublic | BindingFlags.Instance))
            {
                var attributes = method.GetCustomAttributes(typeof(ConsoleCommandAttribute), true);
                if (attributes.Length > 0)
                {
                    var attribute = attributes[0] as ConsoleCommandAttribute;
                    cmd.AddConsoleCommand(attribute?.Command, this, method.Name);
                    continue;
                }

                attributes = method.GetCustomAttributes(typeof(ChatCommandAttribute), true);
                if (attributes.Length > 0)
                {
                    var attribute = attributes[0] as ChatCommandAttribute;
                    cmd.AddChatCommand(attribute?.Command, this, method.Name);
                }
            }
            base.HandleAddedToManager(manager);
        }
Beispiel #7
0
        /// <summary>
        /// Called when a plugin has been removed from manager
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="manager"></param>
        private void plugin_OnRemovedFromManager(Plugin sender, PluginManager manager)
        {
            // Find all console commands which were registered by the plugin
            var commands = consoleCommands.Values.Where(c => c.PluginCallbacks.Any(cb => cb.Plugin == sender)).ToArray();
            foreach (var cmd in commands)
            {
                cmd.PluginCallbacks.RemoveAll(cb => cb.Plugin == sender);
                if (cmd.PluginCallbacks.Count > 0) continue;

                // This command is no longer registered by any plugins
                consoleCommands.Remove(cmd.Name);

                if (cmd.OriginalCallback == null)
                {
                    // This is a custom command, remove it completely
                    rustcommands.Remove(cmd.RustCommand.namefull);
                    ConsoleSystem.Index.GetAll().Remove(cmd.RustCommand);
                }
                else
                {
                    // This is a vanilla rust command, restore the original callback
                    cmd.RustCommand.Call = cmd.OriginalCallback;
                }
            }

            // Remove all chat commands which were registered by the plugin
            foreach (var cmd in chatCommands.Values.Where(c => c.Plugin == sender).ToArray())
                chatCommands.Remove(cmd.Name);

            // Unhook the event
            sender.OnRemovedFromManager -= plugin_OnRemovedFromManager;
        }
Beispiel #8
0
 /// <summary>
 /// Called when the owner plugin was unloaded
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="manager"></param>
 private void owner_OnRemovedFromManager(Plugin sender, PluginManager manager) => Destroy();
Beispiel #9
0
        public override void HandleAddedToManager(PluginManager manager)
        {
            base.HandleAddedToManager(manager);

            if (Filename != null) Watcher.AddMapping(Name);

            foreach (var name in pluginReferenceFields.Keys) pluginReferenceFields[name].SetValue(this, manager.GetPlugin(name));

            /*var compilable_plugin = CSharpPluginLoader.GetCompilablePlugin(Interface.Oxide.PluginDirectory, Name);
            if (compilable_plugin != null && compilable_plugin.CompiledAssembly != null)
            {
                System.IO.File.WriteAllBytes(Interface.Oxide.PluginDirectory + "\\" + Name + ".dump", compilable_plugin.CompiledAssembly.PatchedAssembly);
                Interface.Oxide.LogWarning($"The raw assembly has been dumped to Plugins/{Name}.dump");
            }*/

            try
            {
                OnCallHook("Loaded", null);
            }
            catch (Exception ex)
            {
                Interface.Oxide.LogException($"Failed to initialize plugin '{Name} v{Version}'", ex);
                Loader.PluginErrors[Name] = ex.Message;
            }
        }
Beispiel #10
0
        public override void HandleRemovedFromManager(PluginManager manager)
        {
            if (IsLoaded)
            {
                CallHook("Unloaded", null);
                CallHook("Unload", null);
            }

            Watcher.RemoveMapping(Name);

            foreach (var name in pluginReferenceFields.Keys) pluginReferenceFields[name].SetValue(this, null);

            base.HandleRemovedFromManager(manager);
        }
Beispiel #11
0
        /// <summary>
        /// Called when a plugin has been removed from manager
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="manager"></param>
        private void plugin_OnRemovedFromManager(Plugin sender, PluginManager manager)
        {
            // Remove all chat commands which were registered by the plugin
            foreach (var cmd in chatCommands.Values.Where(c => c.Plugin == sender).ToArray())
            {
                chatCommands.Remove(cmd.Name);
                CommandManager.RegisteredCommands.Remove(cmd.Name);
            }

            // Unhook the event
            Event.Callback<Plugin, PluginManager> event_callback;
            if (pluginRemovedFromManager.TryGetValue(sender, out event_callback))
            {
                event_callback.Remove();
                pluginRemovedFromManager.Remove(sender);
            }
        }
Beispiel #12
0
 private void OnRemovedFromManager(Plugin sender, PluginManager manager)
 {
     Dictionary<string, Connection> connections;
     if (_connections.TryGetValue(sender.Name, out connections))
     {
         foreach (var connection in connections)
         {
             if (connection.Value.Plugin != sender) continue;
             if (connection.Value.Con?.State != ConnectionState.Closed)
                 Interface.Oxide.LogWarning("Unclosed mysql connection ({0}), by plugin '{1}', closing...", connection.Value.Con?.ConnectionString, connection.Value.Plugin?.Name ?? "null");
             connection.Value.Con?.Close();
             connection.Value.Plugin = null;
         }
         _connections.Remove(sender.Name);
     }
     sender.OnRemovedFromManager -= OnRemovedFromManager;
 }
Beispiel #13
0
        /// <summary>
        /// Called when this plugin has been removed from the specified manager
        /// </summary>
        /// <param name="manager"></param>
        public override void HandleRemovedFromManager(PluginManager manager)
        {
            // Let plugin know that it's unloading
            OnCallHook("Unload", null);

            // Remove us from the watcher
            watcher.RemoveMapping(Name);

            // Call base
            base.HandleRemovedFromManager(manager);

            Table.Dispose();
            LuaEnvironment.DeleteObject(this);
            LuaEnvironment.DoString("collectgarbage()");
        }
Beispiel #14
0
 private void OnRemovedFromManager(Plugin sender, PluginManager manager)
 {
     var toRemove = new List<string>();
     foreach (var connection in _connections)
     {
         if (connection.Value.Plugin != sender) continue;
         if (connection.Value.Con?.State != ConnectionState.Closed)
             Interface.Oxide.LogWarning("Unclosed sqlite connection ({0}), by plugin '{1}', closing...", connection.Value.ConnectionString, connection.Value.Plugin?.Name ?? "null");
         connection.Value.Con?.Close();
         connection.Value.Plugin = null;
         toRemove.Add(connection.Key);
     }
     foreach (var conStr in toRemove)
         _connections.Remove(conStr);
     sender.OnRemovedFromManager -= OnRemovedFromManager;
 }
Beispiel #15
0
 /// <summary>
 /// Called when a plugin has been unloaded
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="manager"></param>
 private void owner_OnRemovedFromManager(Plugin sender, PluginManager manager)
 {
     permset.Remove(sender);
 }
Beispiel #16
0
        /// <summary>
        /// Called when a plugin has been removed from manager
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="manager"></param>
        private void plugin_OnRemovedFromManager(Plugin sender, PluginManager manager)
        {
            // Find all console commands which were registered by the plugin
            var commands = ConsoleCommands.Values.Where(c => c.PluginCallbacks.Any(cb => cb.Plugin == sender)).ToArray();
            foreach (var cmd in commands)
            {
                cmd.PluginCallbacks.RemoveAll(cb => cb.Plugin == sender);
                if (cmd.PluginCallbacks.Count > 0) continue;

                // This command is no longer registered by any plugins
                ConsoleCommands.Remove(cmd.Name);
            }

            // Remove all chat commands which were registered by the plugin
            foreach (var cmd in ChatCommands.Values.Where(c => c.Plugin == sender).ToArray())
                ChatCommands.Remove(cmd.Name);

            // Unhook the event
            Event.Callback<Plugin, PluginManager> event_callback;
            if (pluginRemovedFromManager.TryGetValue(sender, out event_callback))
            {
                event_callback.Remove();
                pluginRemovedFromManager.Remove(sender);
            }
        }
Beispiel #17
0
        /// <summary>
        /// Called when a plugin has been removed from manager
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="manager"></param>
        private void plugin_OnRemovedFromManager(Plugin sender, PluginManager manager)
        {
            // Find all console commands which were registered by the plugin
            var commands = consoleCommands.Values.Where(c => c.PluginCallbacks.Any(cb => cb.Plugin == sender)).ToArray();
            foreach (var cmd in commands)
            {
                cmd.PluginCallbacks.RemoveAll(cb => cb.Plugin == sender);
                if (cmd.PluginCallbacks.Count > 0) continue;

                // This command is no longer registered by any plugins
                consoleCommands.Remove(cmd.Name);
            }

            // Remove all chat commands which were registered by the plugin
            foreach (var cmd in chatCommands.Values.Where(c => c.Plugin == sender).ToArray()) chatCommands.Remove(cmd.Name);

            // Unhook the event
            sender.OnRemovedFromManager -= plugin_OnRemovedFromManager;
        }
Beispiel #18
0
 /// <summary>
 /// Initializes a new instance of the Plugins library
 /// </summary>
 public Plugins(PluginManager pluginmanager)
 {
     PluginManager = pluginmanager;
 }
Beispiel #19
0
 /// <summary>
 /// Called when the plugin was unloaded
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="manager"></param>
 private void plugin_OnRemovedFromManager(Plugin sender, PluginManager manager)
 {
     Event.Callback<Plugin, PluginManager> event_callback;
     if (pluginRemovedFromManager.TryGetValue(sender, out event_callback))
     {
         event_callback.Remove();
         pluginRemovedFromManager.Remove(sender);
     }
     var langs = GetLanguages(sender);
     foreach (var lang in langs) langFiles.Remove($"{sender.Name}.{lang}.json");
 }
Beispiel #20
0
 /// <summary>
 /// Called when the plugin was unloaded
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="manager"></param>
 private void plugin_OnRemovedFromManager(Plugin sender, PluginManager manager)
 {
     sender.OnRemovedFromManager -= plugin_OnRemovedFromManager;
     var langs = GetLanguages(sender);
     foreach (var lang in langs) langFiles.Remove($"{sender.Name}.{lang}.json");
 }
Beispiel #21
0
        /// <summary>
        /// Called when a plugin has been removed from manager
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="manager"></param>
        private void plugin_OnRemovedFromManager(Plugin sender, PluginManager manager)
        {
            // Remove all chat commands which were registered by the plugin
            foreach (var cmd in chatCommands.Values.Where(c => c.Plugin == sender).ToArray())
            {
                chatCommands.Remove(cmd.Name);
                CommandManager.RegisteredCommands.Remove(cmd.Name);
            }

            // Unhook the event
            sender.OnRemovedFromManager -= plugin_OnRemovedFromManager;
        }
Beispiel #22
0
 /// <summary>
 /// Called when the owner plugin was unloaded
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="manager"></param>
 private void owner_OnRemovedFromManager(Plugin sender, PluginManager manager)
 {
     if (request != null)
     {
         var outstanding_request = request;
         request = null;
         outstanding_request.Abort();
     }
 }
Beispiel #23
0
        public override void HandleAddedToManager(PluginManager manager)
        {
            base.HandleAddedToManager(manager);

            if (Filename != null) Watcher.AddMapping(Name);

            foreach (var name in pluginReferenceFields.Keys)
                pluginReferenceFields[name].SetValue(this, manager.GetPlugin(name));

            try
            {
                OnCallHook("Loaded", new object[0]);
            }
            catch (Exception ex)
            {
                Interface.Oxide.LogException($"Failed to initialize plugin '{Name} v{Version}'", ex);
                Loader.PluginErrors[Name] = ex.Message;
            }
        }
Beispiel #24
0
        /// <summary>
        /// Called when this plugin has been removed from the specified manager
        /// </summary>
        /// <param name="manager"></param>
        public override void HandleRemovedFromManager(PluginManager manager)
        {
            // Let plugin know that it's unloading
            CallFunction("Unload", null);

            // Remove us from the watcher
            watcher.RemoveMapping(Name);

            // Call base
            base.HandleRemovedFromManager(manager);
        }
 public Plugins(Oxide.Core.Plugins.PluginManager pluginmanager)
 {
     this.PluginManager = pluginmanager;
 }