Example #1
0
        /// <summary>
        /// Gets the path to the Uconomy assembly. Will return null if not found.
        /// </summary>
        public static string?GetUconomyFile()
        {
            var pluginsFolder = Path.Combine(RocketModIntegration.GetRocketFolder(), "Plugins");

            if (!Directory.Exists(pluginsFolder))
            {
                return(null);
            }

            foreach (var file in Directory.GetFiles(pluginsFolder, "*.dll", SearchOption.AllDirectories))
            {
                try
                {
                    var assemblyName = AssemblyName.GetAssemblyName(file);
                    if (assemblyName.Name.Equals("Uconomy"))
                    {
                        return(file);
                    }
                }
                catch
                {
                    // ignored
                }
            }

            return(null);
        }
Example #2
0
        public Task HandleEventAsync(object?sender, OpenModInitializedEvent @event)
        {
            if (RocketModIntegration.IsRocketModUnturnedLoaded(out _))
            {
                if (s_RocketInitialized)
                {
                    StartRocketModRconWithRocketModSettings();
                }

                // Use RocketModInitializedEvent instead
                return(Task.CompletedTask);
            }

            var rocketRconEnabled = m_UnturnedConfiguration.GetSection("rcon:rocketmod:enabled").Get <bool>();

            if (!rocketRconEnabled)
            {
                return(Task.CompletedTask);
            }

            var bind = m_OpenModConfiguration.GetSection("rcon:bind").Get <string>();
            var port = m_UnturnedConfiguration.GetSection("rcon:rocketmod:port").Get <int>();

            StartRocketModRcon(bind, port);
            return(Task.CompletedTask);
        }
        private void CallRocketPlayerChatted(UnturnedPlayer player, EChatMode mode, string message, ref Color color,
                                             ref bool cancel)
        {
            if (!RocketModIntegration.IsRocketModUnturnedLoaded(out _))
            {
                return;
            }

            m_Logger.LogDebug("Calling the event UnturnedChat.OnPlayerChatted");

            var colorEx  = color;
            var cancelEx = cancel;

            m_PermissionExtensions.CallRocketEvent(player, mode, message, ref colorEx, ref cancelEx);
            if (m_Configuration.GetSection("rocketmodIntegration:canOverrideColor").Get <bool>())
            {
                color = colorEx;
            }

            if (cancelEx)
            {
                m_Logger.LogDebug("RocketMod cancel the message!");
            }
            if (color != colorEx)
            {
                m_Logger.LogDebug("RocketMod override the color! {FromColor} -> {ToColor}", color, colorEx);
            }

            cancel = cancelEx && m_Configuration.GetSection("rocketmodIntegration:canCancelMessage").Get <bool>();
        }
Example #4
0
        public void Dispose()
        {
            RocketModIntegration.Uninstall();

            if (m_IsDisposing)
            {
                return;
            }

            Dedicator.commandWindow.removeIOHandler(m_OpenModIoHandler);

            m_IoHandlers.Reverse();
            foreach (var ioHandler in m_IoHandlers)
            {
                Dedicator.commandWindow.addIOHandler(ioHandler);
            }
            m_IoHandlers.Clear();

            IsComponentAlive = false;
            m_IsDisposing    = true;
            TlsWorkaround.Uninstalll();

            m_Harmony.UnpatchAll(OpenModComponentId);
            UnbindUnturnedEvents();
        }
        private bool IsRocketModRole(string id)
        {
            if (!RocketModIntegration.IsRocketModReady())
            {
                return(false);
            }

            return(R.Permissions.GetGroup(id) != null);
        }
Example #6
0
        protected override UniTask OnLoadAsync()
        {
            m_Logger.LogInformation("Made with <3 by EvolutionPlugins");
            m_Logger.LogInformation("https://github.com/evolutionplugins \\ https://github.com/diffoz");
            m_Logger.LogInformation("Support discord: https://discord.gg/6KymqGv");

            if (RocketModIntegration.IsRocketModUnturnedLoaded(out var asm) && RocketModIntegration.IsRocketModInstalled())
            {
                m_HandleChatPatch =
                    ActivatorUtilitiesEx.CreateInstance <RocketModHandleChatPatch>(m_LifetimeScope,
                                                                                   m_Logger, Harmony, asm !);
            }

            return(AddExample().AsUniTask(false));
        }
Example #7
0
        private async Task ProcessLoginAsync(RocketModRconPacket packet)
        {
            var arguments = ArgumentsParser.ParseArguments(packet.Body !);

            var rocketModLoaded = RocketModIntegration.IsRocketModUnturnedLoaded(out _);

            if (rocketModLoaded && arguments.Length == 2)
            {
                if (ProcessRocketModLogin(packet))
                {
                    Id = "root";
                    IsAuthenticated = true;
                    await SendMessageAsync("Logged in.");

                    return;
                }

                await SendMessageAsync("Authentication failed.");

                IncreaseFailedAuthAttempts();
                await DisconnectOnFailedLoginAttemptsAsync();

                return;
            }

            if (arguments.Length != 3)
            {
                await SendMessageAsync("Invalid Syntax! Usage: login <username> <password>");

                IncreaseFailedAuthAttempts();
                await DisconnectOnFailedLoginAttemptsAsync();

                return;
            }

            await OnAuthenticatingAsync(arguments[1], arguments[2]);
        }
Example #8
0
        public void ConfigureServices(IOpenModServiceConfigurationContext openModStartupContext, IServiceCollection serviceCollection)
        {
            serviceCollection.Configure <PermissionCheckerOptions>(options =>
            {
                options.AddPermissionCheckProvider <UnturnedAdminPermissionCheckProvider>();
            });

            serviceCollection.Configure <CommandStoreOptions>(options =>
            {
                options.AddCommandSource <UnturnedCommandSource>();
            });

            serviceCollection.Configure <UserManagerOptions>(options =>
            {
                options.AddUserProvider <UnturnedUserProvider>();
            });

            serviceCollection.Configure <CommandParameterResolverOptions>(options =>
            {
                options.AddCommandParameterResolveProvider <UnturnedPlayerCommandParameterResolveProvider>();
            });

            if (RocketModIntegration.IsRocketModInstalled())
            {
                // todo: check direction for permission link from config

                serviceCollection.Configure <PermissionCheckerOptions>(options =>
                {
                    options.AddPermissionSource <RocketPermissionStore>();
                });

                serviceCollection.AddTransient <IPermissionRoleStore, RocketPermissionRoleStore>();
            }

            serviceCollection.AddSingleton <UnturnedCommandHandler>();
        }
Example #9
0
 private bool RocketModIntegrationEnabled()
 {
     // todo: check from config
     return(RocketModIntegration.IsRocketModReady());
 }
Example #10
0
        public Task InitAsync()
        {
            if (RocketModIntegration.IsRocketModInstalled())
            {
                var rocketModIntegration = ActivatorUtilitiesEx.CreateInstance <RocketModIntegration>(LifetimeScope);
                rocketModIntegration.Install();
            }

            // ReSharper disable PossibleNullReferenceException
            IsComponentAlive = true;

            m_Harmony = new Harmony(OpenModComponentId);
            m_Harmony.PatchAll(GetType().Assembly);

            m_UnturnedCommandHandler.Value.Subscribe();
            BindUnturnedEvents();

            var ioHandlers = (List <ICommandInputOutput>) typeof(CommandWindow)
                             .GetField("ioHandlers", BindingFlags.NonPublic | BindingFlags.Instance)
                             .GetValue(Dedicator.commandWindow);

            CommandLineFlag?shouldManageConsole = null;
            var             previousShouldManageConsoleValue = true;

            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
            {
                /* Fix Unturned destroying console and breaking Serilog formatting and colors */
                var windowsConsole           = typeof(Provider).Assembly.GetType("SDG.Unturned.WindowsConsole");
                var shouldManageConsoleField = windowsConsole?.GetField("shouldManageConsole",
                                                                        BindingFlags.Static | BindingFlags.NonPublic);

                if (shouldManageConsoleField != null)
                {
                    shouldManageConsole = (CommandLineFlag)shouldManageConsoleField.GetValue(null);
                    previousShouldManageConsoleValue = shouldManageConsole.value;
                    shouldManageConsole.value        = false;
                }
            }

            m_IoHandlers = ioHandlers.ToList(); // copy Unturneds IoHandlers
            // unturned built-in io handlers
            var defaultIoHandlers = ioHandlers.Where(c =>
                                                     c.GetType().FullName
                                                     .Equals("SDG.Unturned.ThreadedWindowsConsoleInputOutput") || // type doesnt exist on Linux
                                                     c.GetType().FullName.Equals("SDG.Unturned.WindowsConsoleInputOutput") || // type doesnt exist on Linux
                                                     c.GetType() == typeof(ThreadedConsoleInputOutput) ||
                                                     c.GetType() == typeof(ConsoleInputOutput)).ToList();

            foreach (var ioHandler in defaultIoHandlers)
            {
                Dedicator.commandWindow.removeIOHandler(ioHandler);
            }

            if (shouldManageConsole != null)
            {
                shouldManageConsole.value = previousShouldManageConsoleValue;
            }

            m_OpenModIoHandler = RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
                ? ActivatorUtilities.CreateInstance <OpenModWindowsConsoleInputOutput>(m_ServiceProvider)
                : ActivatorUtilities.CreateInstance <OpenModConsoleInputOutput>(m_ServiceProvider);

            Dedicator.commandWindow.addIOHandler(m_OpenModIoHandler);

            m_Logger.LogInformation($"OpenMod for Unturned v{m_HostInformation.HostVersion} is initializing...");

            TlsWorkaround.Install();

            if (!s_UniTaskInited)
            {
                var unitySynchronizationContetextField =
                    typeof(PlayerLoopHelper).GetField("unitySynchronizationContetext",
                                                      BindingFlags.Static | BindingFlags.NonPublic);
                unitySynchronizationContetextField.SetValue(null, SynchronizationContext.Current);

                var mainThreadIdField =
                    typeof(PlayerLoopHelper).GetField("mainThreadId", BindingFlags.Static | BindingFlags.NonPublic);
                mainThreadIdField.SetValue(null, Thread.CurrentThread.ManagedThreadId);

                var playerLoop = PlayerLoop.GetDefaultPlayerLoop();
                PlayerLoopHelper.Initialize(ref playerLoop);
                s_UniTaskInited = true;
            }

            m_Logger.LogInformation("OpenMod for Unturned is ready.");

            return(Task.CompletedTask);
            // ReSharper restore PossibleNullReferenceException
        }
Example #11
0
        public void ConfigureServices(IOpenModServiceConfigurationContext openModStartupContext, IServiceCollection serviceCollection)
        {
            var unturnedConfiguration = new OpenModUnturnedConfiguration(openModStartupContext.Runtime.WorkingDirectory);

            serviceCollection.AddSingleton <IOpenModUnturnedConfiguration>(unturnedConfiguration);
            serviceCollection.AddSingleton <IGameHostInformation, UnturnedHostInformation>();

            serviceCollection.Configure <PermissionCheckerOptions>(options =>
            {
                options.AddPermissionCheckProvider <UnturnedAdminPermissionCheckProvider>();
            });

            serviceCollection.Configure <CommandStoreOptions>(options =>
            {
                options.AddCommandSource <UnturnedCommandSource>();
                var logger = openModStartupContext.LoggerFactory.CreateLogger <OpenModComponentCommandSource>();
                var host   = openModStartupContext.Runtime.LifetimeScope.Resolve <IOpenModHost>();
                options.AddCommandSource(new OpenModComponentCommandSource(logger, host, typeof(OpenModUnturnedHost).Assembly));
            });

            serviceCollection.Configure <UserManagerOptions>(options =>
            {
                options.AddUserProvider <UnturnedUserProvider>();
            });

            serviceCollection.Configure <CommandParameterResolverOptions>(options =>
            {
                options.AddCommandParameterResolveProvider <UnturnedPlayerCommandParameterResolveProvider>();
                options.AddCommandParameterResolveProvider <UnturnedLocationCommandParameterResolveProvider>();
                options.AddCommandParameterResolveProvider <CSteamIDCommandParameterResolveProvider>();
            });

            if (RocketModIntegration.IsRocketModInstalled())
            {
                serviceCollection.AddSingleton <IRocketModComponent, RocketModComponent>();

                var permissionSystem = unturnedConfiguration.Configuration
                                       .GetSection("rocketmodIntegration:permissionSystem")
                                       .Get <string>();

                if (permissionSystem.Equals("RocketMod", StringComparison.OrdinalIgnoreCase))
                {
                    serviceCollection.Configure <PermissionCheckerOptions>(options =>
                    {
                        options.AddPermissionSource <RocketPermissionStore>();
                        options.AddPermissionCheckProvider <RocketCooldownPermissionCheckProvider>();
                    });

                    serviceCollection.AddTransient <IPermissionRoleStore, RocketPermissionRoleStore>();
                }

                var economySystem = unturnedConfiguration.Configuration
                                    .GetSection("rocketmodIntegration:economySystem")
                                    .Get <string>();

                if (economySystem.Equals("RocketMod_Uconomy", StringComparison.OrdinalIgnoreCase))
                {
                    if (UconomyIntegration.IsUconomyInstalled())
                    {
                        serviceCollection.AddSingleton <IEconomyProvider, UconomyEconomyProvider>();
                    }
                    else
                    {
                        var logger = openModStartupContext.LoggerFactory.CreateLogger <RocketModIntegration>();
                        logger.LogWarning("Economy system was set to RocketMod_Uconomy but Uconomy is not installed. Defaulting to Separate");
                    }
                }
            }

            serviceCollection.AddSingleton <UnturnedCommandHandler>();
        }
Example #12
0
        private bool EnsureUconomyReady()
        {
            if (m_UconomyReady)
            {
                return(true);
            }

            if (!RocketModIntegration.IsRocketModReady())
            {
                return(false);
            }

            var uconomyAssembly = UconomyIntegration.GetUconomyAssembly();

            if (uconomyAssembly == null)
            {
                return(false);
            }

            var uconomyType = uconomyAssembly.GetType("fr34kyn01535.Uconomy.Uconomy");

            if (uconomyType == null)
            {
                throw new Exception($"Failed to find Uconomy type in {uconomyAssembly}");
            }

            var instanceField = uconomyType.GetField("Instance", c_BindingFlags);

            if (instanceField == null)
            {
                throw new Exception($"Failed to find Instance field in {uconomyType}");
            }

            m_DatabaseField         = uconomyType.GetField("Database", c_BindingFlags);
            m_DatabaseType          = m_DatabaseField.FieldType;
            m_GetBalanceMethod      = m_DatabaseType.GetMethod("GetBalance", c_BindingFlags);
            m_IncreaseBalanceMethod = m_DatabaseType.GetMethod("IncreaseBalance", c_BindingFlags);

            var uconomyConfigurationType = uconomyAssembly.GetType("fr34kyn01535.Uconomy.UconomyConfiguration");

            m_MoneySymbolField = uconomyConfigurationType.GetField("MoneySymbol", c_BindingFlags);
            m_MoneyNameField   = uconomyConfigurationType.GetField("MoneyName", c_BindingFlags);

            m_UconomyInstance = instanceField.GetValue(null);
            if (m_UconomyInstance == null)
            {
                return(false);
            }

            var pluginType = typeof(RocketPlugin <>).MakeGenericType(uconomyConfigurationType);
            var pluginConfigurationAssetField    = pluginType.GetField("configuration", c_BindingFlags);
            var pluginConfigurationAssetInstance = pluginConfigurationAssetField.GetValue(m_UconomyInstance);

            var uconomyConfigurationInstanceProperty = pluginConfigurationAssetField.FieldType.GetProperty("Instance", c_BindingFlags);

            m_UconomyConfigurationInstance = uconomyConfigurationInstanceProperty.GetGetMethod()
                                             .Invoke(pluginConfigurationAssetInstance, new object[0]);

            m_DatabaseInstance = m_DatabaseField.GetValue(m_UconomyInstance);
            if (m_DatabaseInstance == null)
            {
                return(false);
            }

            PatchUconomy();
            m_UconomyReady = true;
            return(true);
        }
Example #13
0
        public Task InitAsync()
        {
            try
            {
                if (RocketModIntegration.IsRocketModInstalled())
                {
                    var rocketModIntegration = ActivatorUtilitiesEx.CreateInstance <RocketModIntegration>(LifetimeScope);
                    rocketModIntegration.Install();
                }
            }
            catch (Exception ex)
            {
                m_Logger.LogError(ex, "Failed to integrate with RocketMod");
            }

            // ReSharper disable PossibleNullReferenceException
            IsComponentAlive = true;

            try
            {
                m_Harmony = new Harmony(OpenModComponentId);
                m_Harmony.PatchAll(GetType().Assembly);
            }
            catch (Exception ex)
            {
                m_Logger.LogError(ex, "Failed to patch with Harmony. Report this error on the OpenMod discord: https://discord.com/invite/jRrCJVm");
            }

            m_UnturnedCommandHandler.Value.Subscribe();
            BindUnturnedEvents();

            var ioHandlers = (List <ICommandInputOutput>) typeof(CommandWindow)
                             .GetField("ioHandlers", BindingFlags.NonPublic | BindingFlags.Instance)
                             .GetValue(Dedicator.commandWindow);

            CommandLineFlag?shouldManageConsole = null;
            var             previousShouldManageConsoleValue = true;

            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
            {
                /* Fix Unturned destroying console and breaking Serilog formatting and colors */
                var windowsConsole           = typeof(Provider).Assembly.GetType("SDG.Unturned.WindowsConsole");
                var shouldManageConsoleField = windowsConsole?.GetField("shouldManageConsole",
                                                                        BindingFlags.Static | BindingFlags.NonPublic);

                if (shouldManageConsoleField != null)
                {
                    shouldManageConsole = (CommandLineFlag)shouldManageConsoleField.GetValue(null);
                    previousShouldManageConsoleValue = shouldManageConsole.value;
                    shouldManageConsole.value        = false;
                }
            }

            m_IoHandlers = ioHandlers.ToList(); // copy Unturneds IoHandlers
            // unturned built-in io handlers
            var defaultIoHandlers = ioHandlers.Where(c =>
                                                     c.GetType().FullName
                                                     .Equals("SDG.Unturned.ThreadedWindowsConsoleInputOutput") || // type doesnt exist on Linux
                                                     c.GetType().FullName.Equals("SDG.Unturned.WindowsConsoleInputOutput") || // type doesnt exist on Linux
                                                     c.GetType() == typeof(ThreadedConsoleInputOutput) ||
                                                     c.GetType() == typeof(ConsoleInputOutput)).ToList();

            foreach (var ioHandler in defaultIoHandlers)
            {
                Dedicator.commandWindow.removeIOHandler(ioHandler);
            }

            if (shouldManageConsole != null)
            {
                shouldManageConsole.value = previousShouldManageConsoleValue;
            }

            m_OpenModIoHandler = RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
                ? ActivatorUtilities.CreateInstance <OpenModWindowsConsoleInputOutput>(m_ServiceProvider)
                : ActivatorUtilities.CreateInstance <OpenModConsoleInputOutput>(m_ServiceProvider);

            Dedicator.commandWindow.addIOHandler(m_OpenModIoHandler);

            m_Logger.LogInformation("OpenMod for Unturned v{HostVersion} is initializing...",
                                    m_HostInformation.HostVersion);

            m_Logger.LogInformation("OpenMod for Unturned is ready");

            return(Task.CompletedTask);
            // ReSharper restore PossibleNullReferenceException
        }