private static void LoadPlugins(string pluginsFolder) { if (Directory.Exists(pluginsFolder)) { Base.Info("Loading plugins..."); List <string> files = Directory.GetFiles(pluginsFolder).ToList <string>(); foreach (string dllfile in files) { if (dllfile.EndsWith(".dll")) { Assembly asm = Assembly.LoadFrom(dllfile); Base.Info("PLUGIN LOADER | Loading plugin " + asm.GetName().Name); try { foreach (Type t in asm.GetTypes()) { if (t.IsSubclassOf(typeof(Plugin)) && t != typeof(Plugin)) { plugins.Add(asm); object obj = Activator.CreateInstance(t); try { MethodInfo method = t.GetMethod("initializePlugin"); string aaa = (string)method.Invoke(obj, null); AddCommands(asm); } catch (Exception e) { Base.Error("PLUGIN LOADER | Failed to load file: " + asm.GetName().Name); Base.Error($"PLUGIN LOADER | {e.Message}"); Base.Error($"PLUGIN LOADER | {e.InnerException}"); }; } } } catch (Exception e) { Base.Error("PLUGIN LOADER | Failed to load file: " + asm.GetName().Name); Base.Error($"PLUGIN LOADER | {e.Message}"); Base.Error($"PLUGIN LOADER | {e.InnerException}"); } } } Base.Info("Plugins loaded!"); } }
internal static void TriggerEvent <t1>(Event ev) where t1 : IEventHandler { foreach (t1 handler in GetEvents <t1>()) { try { if (handler is t1 thandler) { ev.ExecuteHandler(thandler); } } catch (Exception e) { Base.Error($"{e.Message}\n{e.StackTrace}"); } } }
internal static void TriggerEvent <t1>(EventStage st, Event ev) where t1 : IEventHandler { try { ev.Stage = st; Base.Debug($"Triggering {st} {ev.GetType().Name}"); PluginManager.TriggerEvent <t1>(ev); } catch (Exception e) { Base.Error($"Error {st} {typeof(Event).Name}: {e.InnerException}"); } }
private bool CheckDiscord(GameObject go) { string[] uid = go.GetComponent <CharacterClassManager>().UserId.Split('@'); bool success = Int64.TryParse(uid[0], out long snowflake); if (!success) { Base.Error("REEEEE"); return(false); } DateTime date = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc); date = date.AddSeconds(((snowflake >> 22) + 1420070400000) / 1000).ToLocalTime(); new TimeSpan(date.Ticks); Base.Error($"{uid[0]} - {date.ToString()} - {(DateTime.Now - date).Days}"); return(true); }
public static void AddCommand(Plugin plugin, ICommand command, string name, string[] alias) { Base.Info(name); if (allCommands.ContainsKey(name) || oldCommands.ContainsKey(name)) { Base.Error($"{plugin.Details.name} tried to register a pre-existing command: {name.ToUpper()}"); } else { oldCommands.Add(name.ToUpper(), command); } if (alias != null) { foreach (string cmdalias in alias) { if (!allCommands.ContainsKey(cmdalias) && !oldCommands.ContainsKey(cmdalias)) { oldCommands.Add(cmdalias.ToUpper(), command); } } } }
/// <summary> /// Is run whenever a user joins the server (instead of pre-authenticates) /// </summary> /// <param name="gameObject"></param> public void SmartGuardDeepCheck(GameObject go) { try { if (!_enable) { return; } CharacterClassManager ccm = go.GetComponent <CharacterClassManager>(); ServerRoles sr = go.GetComponent <ServerRoles>(); NicknameSync ns = go.GetComponent <NicknameSync>(); CustomLiteNetLib4MirrorTransport cln = go.GetComponent <CustomLiteNetLib4MirrorTransport>(); string domain = ccm.UserId.Split('@')[1].ToLower(); //Whitelist Check if (sr.BypassStaff && _skStaffGlobal) { Base.SmartGuard("User is global staff. Skipping..."); return; } else if (sr.RemoteAdmin && _skStaffServer) { Base.SmartGuard("User is server staff. Skipping..."); return; } else if (_uidWhitelist.Contains(ccm.UserId)) { Base.SmartGuard("User's UserId is whitelisted. Skipping..."); } else if (_nameWhitelist.Contains(ns.MyNick)) { Base.SmartGuard("User's name is whitelisted (not recommended). Skipping..."); return; } //Blacklist Check if (_nameFilterSmart) { string antil33t = _rgx.Replace(ns.MyNick.ToLower(), string.Empty); foreach (KeyValuePair <string, string> pair in leetrules) { antil33t = antil33t.Replace(pair.Key, pair.Value); } if (_nameBlacklist.Contains(antil33t)) { if (_banDurationOne == 0) { HandlePunishments(go, "Blacklisted name"); return; } else if (_banDurationOne > 0) { HandlePunishments(go, "Blacklisted name"); return; } } } else if (!_nameFilterSmart) { if (_nameBlacklist.Contains(ns.MyNick.ToLower())) { if (_banDurationOne == 0) { HandlePunishments(go, "Blacklisted name"); return; } else if (_banDurationOne > 0) { HandlePunishments(go, "Blacklisted name"); return; } } } if (_uidBlacklist.Contains(ccm.UserId)) { if (_banDurationOne == 0) { HandlePunishments(go, "Blacklisted UID"); } else if (_banDurationOne > 0) { HandlePunishments(go, "Blacklisted UID"); } } bool doContinue = true; if (domain == "discord") { doContinue = CheckDiscord(go); } else if (domain == "steam") { doContinue = CheckSteam(go); } if (!doContinue) { return; } } catch (Exception e) { Base.Error(e.ToString()); } }