Esempio n. 1
0
        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!");
            }
        }
Esempio n. 2
0
 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}"); }
     }
 }
Esempio n. 3
0
        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}");
            }
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
                    }
                }
            }
        }
Esempio n. 6
0
        /// <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());
            }
        }