Exemple #1
0
        /// <summary>
        /// Constructor :D
        /// </summary>
        protected EssModule()
        {
            Info = ReflectionUtil.GetAttributeFrom <ModuleInfo>(this);
            Preconditions.NotNull(Info, "Module must have 'ModuleInfo' attribute");
            Preconditions.NotNull(Info.Name, "Module name cannot be null");

            Logger = new EssLogger($"[{Info.Name}] ");
            Folder = UEssentials.ModulesFolder + Info.Name + "/";

            if (!Directory.Exists(Folder))
            {
                Directory.CreateDirectory(Folder);
            }
        }
Exemple #2
0
        protected override void Load()
        {
            try {
                var stopwatch = Stopwatch.StartNew();

                Instance      = this;
                R.Permissions = new EssentialsPermissionsProvider();

                Provider.onServerDisconnected += PlayerDisconnectCallback;
                Provider.onServerConnected    += PlayerConnectCallback;

                Logger           = new EssLogger("[uEssentials] ");
                ConnectedPlayers = new Dictionary <ulong, UPlayer>();

                Logger.Log("Enabling uEssentials.", ConsoleColor.Green);

                if (Provider.Players.Count > 0)
                {
                    Provider.Players.ForEach(p => {
                        ConnectedPlayers.Add(p.SteamPlayerID.CSteamID.m_SteamID,
                                             new UPlayer(UnturnedPlayer.FromSteamPlayer(p)));
                    });
                }

                _folder            = Rocket.Core.Environment.PluginsDirectory + "/uEssentials/";
                _translationFolder = Folder + "translations/";
                _dataFolder        = Folder + "data/";
                _modulesFolder     = Folder + "modules/";

                var configPath = $"{Folder}config.json";

                Config = new EssConfig();
                Config.Load(configPath);

                if (Config.WebConfig.Enabled)
                {
                    var conf = new EssWebConfig();
                    conf.Load(configPath);
                    Config = conf;
                }

                CommandsConfig = new CommandsConfig();
                CommandsConfig.Load($"{Folder}commands.json");

                Updater        = new GithubUpdater();
                EventManager   = new EventManager();
                CommandManager = new CommandManager();
                ModuleManager  = new ModuleManager();
                HookManager    = new HookManager();

                EssLang.Load();

                Logger.Log("Plugin version: ", ConsoleColor.Green, suffix: "");

                #if EXPERIMENTAL
                const string label = "experimental"
                    #if EXPERIMENTAL_HASH
                                     + "-commit-$COMMIT_HASH$"
                    #endif
                ;

                Logger.Log($"{PLUGIN_VERSION} {label}", ConsoleColor.White, "");
                #else
                Logger.Log(PLUGIN_VERSION, ConsoleColor.White, "");
                #endif

                Logger.Log("Recommended Rocket version: ", ConsoleColor.Green, suffix: "");
                Logger.Log(ROCKET_VERSION, ConsoleColor.White, "");
                Logger.Log("Recommended Unturned version: ", ConsoleColor.Green, suffix: "");
                Logger.Log(UNTURNED_VERSION, ConsoleColor.White, "");
                Logger.Log("Author: ", ConsoleColor.Green, suffix: "");
                Logger.Log("leonardosc", ConsoleColor.White, "");
                Logger.Log("Wiki: ", ConsoleColor.Green, suffix: "");
                Logger.Log("uessentials.github.io", ConsoleColor.White, "");

                EventManager.RegisterAll(GetType().Assembly);

                if (!Config.EnableJoinLeaveMessage)
                {
                    EventManager.Unregister <EssentialsEventHandler>("JoinMessage");
                    EventManager.Unregister <EssentialsEventHandler>("LeaveMessage");
                }

                CommandManager.RegisterAll("Essentials.Commands");

                HookManager.RegisterAll();
                HookManager.LoadAll();

                if (Config.Economy.UseXp)
                {
                    EconomyProvider = Optional <IEconomyProvider> .Of(new ExpEconomyProvider());
                }
                else if (HookManager.GetActiveByType <UconomyHook>().IsPresent)
                {
                    EconomyProvider = Optional <IEconomyProvider> .Of(
                        HookManager.GetActiveByType <UconomyHook>().Value);
                }
                else
                {
                    EconomyProvider = Optional <IEconomyProvider> .Empty();
                }

                /*
                 *  Load native modules
                 */
                (
                    from type in Assembly.GetTypes()
                    where typeof(NativeModule).IsAssignableFrom(type)
                    where !type.IsAbstract
                    let mAttr = (ModuleInfo)type.GetCustomAttributes(typeof(ModuleInfo), false)[0]
                                where Config.EnabledSystems.Any(s => s.Equals(mAttr.Name, StringComparison.OrdinalIgnoreCase))
                                select type
                ).ForEach(type => {
                    ModuleManager.LoadModule((NativeModule)Activator.CreateInstance(type));
                });

                Logger.LogInfo($"Loaded {CommandManager.Commands.Count()} commands");

                Logger.LogInfo("Loading modules...");
                ModuleManager.LoadAll(ModulesFolder);
                Logger.LogInfo($"Loaded {ModuleManager.RunningModules.Count(t => !(t is NativeModule))} modules");

                if (Config.AutoAnnouncer.Enabled)
                {
                    Config.AutoAnnouncer.Start();
                }

                if (Config.AutoCommands.Enabled)
                {
                    Config.AutoCommands.Start();
                }

                if (!Config.Updater.AlertOnJoin)
                {
                    EventManager.Unregister <EssentialsEventHandler>("UpdateAlert");
                }

                if (Config.ServerFrameRate != -1)
                {
                    var frameRate = Config.ServerFrameRate;

                    if (Config.ServerFrameRate < -1)
                    {
                        frameRate = -1; // Set to default
                    }

                    UnityEngine.Application.targetFrameRate = frameRate;
                }

                if (Config.DisabledCommands.Count != 0)
                {
                    Config.DisabledCommands.ForEach(cmdName => {
                        var command = CommandManager.GetByName(cmdName);

                        if (command == null || command is CommandEssentials)
                        {
                            Logger.LogWarning($"There is no command named '{cmdName}' to disable.");
                        }
                        else
                        {
                            CommandManager.Unregister(command);
                            Logger.LogInfo($"Disabled command: '{command.Name}'");
                        }
                    });
                }

                if (Config.EnableTextCommands)
                {
                    var textCommandsFile = $"{Folder}textcommands.json";

                    TextCommands = new TextCommands();
                    TextCommands.Load(textCommandsFile);

                    TextCommands.Commands.ForEach(txtCommand => {
                        CommandManager.Register(new TextCommand(txtCommand));
                    });
                }

                if (!Config.EnableDeathMessages)
                {
                    EventManager.Unregister <EssentialsEventHandler>("DeathMessages");
                }

                #if EXPERIMENTAL
                Logger.LogWarning("THIS IS AN EXPERIMENTAL BUILD, CAN BE BUGGY.");
                Logger.LogWarning("THIS IS AN EXPERIMENTAL BUILD, CAN BE BUGGY.");
                #endif

                TryAddComponent <Tasks.TaskExecutor>();

                Tasks.New(t => {
                    File.Delete($"{Folder}uEssentials.en.translation.xml");
                    File.Delete($"{Folder}uEssentials.configuration.xml");
                }).Delay(100).Go();

                Tasks.New(t => {
                    UnregisterRocketCommands(true); // Second check, silently.
                }).Delay(3000).Go();

                CommandWindow.ConsoleInput.onInputText += ReloadCallback;
                UnregisterRocketCommands(); // First check.
                Logger.Log($"Enabled ({stopwatch.ElapsedMilliseconds} ms)", ConsoleColor.Green);
            } catch (Exception e) {
                var msg = new List <string>()
                {
                    "An error occurred while enabling uEssentials.",
                    "If this error is not related with wrong configuration please report",
                    "immediatly here https://github.com/uEssentials/uEssentials/issues",
                    "Error: " + e
                };

                if (!Provider.Version.EqualsIgnoreCase(UNTURNED_VERSION))
                {
                    msg.Add("I detected that you are using an different version of the recommended, " +
                            "please update your uEssentials/Unturned.");
                    msg.Add("If you are using the latest uEssentials release, please wait for update.");
                }

                if (Logger == null)
                {
                    Console.BackgroundColor = ConsoleColor.Red;
                    msg.ForEach(Console.WriteLine);
                    Console.BackgroundColor = ConsoleColor.White;
                }
                else
                {
                    msg.ForEach(Logger.LogError);
                }
            }

            #if DEV
            CommandWindow.ConsoleOutput.title = "Unturned Server";
            #else
            CheckUpdates();
            #endif

            #if DUMP_COMMANDS
            DumpCommands();
            #endif
        }