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); }
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); }
/// <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); }
/// <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); }
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); }
/// <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; }
/// <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();
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; } }
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); }
/// <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); } }
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; }
/// <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()"); }
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; }
/// <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); }
/// <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); } }
/// <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; }
/// <summary> /// Initializes a new instance of the Plugins library /// </summary> public Plugins(PluginManager pluginmanager) { PluginManager = pluginmanager; }
/// <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"); }
/// <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"); }
/// <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; }
/// <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(); } }
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; } }
/// <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; }