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); }
public override void HandleAddedToManager(PluginManager manager) { foreach (FieldInfo field in GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance)) { object[] attributes = field.GetCustomAttributes(typeof(OnlinePlayersAttribute), true); if (attributes.Length > 0) { PluginFieldInfo pluginField = new PluginFieldInfo(this, field); if (pluginField.GenericArguments.Length != 2 || pluginField.GenericArguments[0] != typeof(Player)) { Puts($"The {field.Name} field is not a Hash with the player key! (online players will not be tracked)"); continue; } if (!pluginField.LookupMethod("Add", pluginField.GenericArguments)) { Puts($"The {field.Name} field does not support adding Player keys! (online players will not be tracked)"); continue; } if (!pluginField.LookupMethod("Remove", typeof(Player))) { Puts($"The {field.Name} field does not support removing Player 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; } onlinePlayerFields.Add(pluginField); } } foreach (MethodInfo method in GetType().GetMethods(BindingFlags.NonPublic | BindingFlags.Instance)) { object[] attributes = method.GetCustomAttributes(typeof(ChatCommandAttribute), true); if (attributes.Length <= 0) { continue; } ChatCommandAttribute attribute = attributes[0] as ChatCommandAttribute; cmd.AddChatCommand(attribute?.Command, this, method.Name); } base.HandleAddedToManager(manager); }
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); }
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 plugin_field = new PluginFieldInfo(this, field); if (plugin_field.GenericArguments.Length != 2 || plugin_field.GenericArguments[0] != typeof(BasePlayer)) { Puts("The {0} field is not a Hash with a BasePlayer key! (online players will not be tracked)", field.Name); continue; } if (!plugin_field.LookupMethod("Add", plugin_field.GenericArguments)) { Puts("The {0} field does not support adding BasePlayer keys! (online players will not be tracked)", field.Name); continue; } if (!plugin_field.LookupMethod("Remove", typeof(BasePlayer))) { Puts("The {0} field does not support removing BasePlayer keys! (online players will not be tracked)", field.Name); continue; } if (plugin_field.GenericArguments[1].GetField("Player") == null) { Puts("The {0} class does not have a public Player field! (online players will not be tracked)", plugin_field.GenericArguments[1].Name); continue; } if (!plugin_field.HasValidConstructor(typeof(BasePlayer))) { Puts("The {0} field is using a class which contains no valid constructor (online players will not be tracked)", field.Name); continue; } onlinePlayerFields.Add(plugin_field); } } 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); }