Exemplo n.º 1
0
        public Task HandleEventAsync(object sender, RocketModPluginsLoadedEvent @event)
        {
            var permissionSystem = m_UnturnedConfiguration.Configuration
                                   .GetSection("rocketmodIntegration:permissionSystem")
                                   .Get <string>();

            if (permissionSystem.Equals("OpenMod", StringComparison.OrdinalIgnoreCase))
            {
                var scope = m_RocketModComponent.LifetimeScope;
                var permissionProxyProvider = ActivatorUtilitiesEx.CreateInstance <RocketModPermissionProxyProvider>(scope);
                permissionProxyProvider.Install();
            }

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

            if (economySystem.Equals("OpenMod_Uconomy", StringComparison.OrdinalIgnoreCase))
            {
                var uconomyAssembly = UconomyIntegration.GetUconomyAssembly();
                if (uconomyAssembly != null)
                {
                    var databaseType    = uconomyAssembly.GetType("fr34kyn01535.Uconomy.DatabaseManager");
                    var harmonyInstance = new Harmony(UconomyIntegration.HarmonyId);

                    var getBalanceMethod       = databaseType.GetMethod("GetBalance", c_BindingFlags);
                    var getBalancePrefixMethod = typeof(UconomyGetBalancePatch)
                                                 .GetMethod(nameof(UconomyGetBalancePatch.GetBalancePrefix), c_BindingFlags);
                    harmonyInstance.Patch(getBalanceMethod, prefix: new HarmonyMethod(getBalancePrefixMethod));

                    var increaseBalancePrefixMethod = typeof(UconomyBalanceIncreasePatch)
                                                      .GetMethod(nameof(UconomyBalanceIncreasePatch.IncreaseBalancePrefix), c_BindingFlags);
                    var increaseBalanceMethod = databaseType.GetMethod("IncreaseBalance", c_BindingFlags);
                    harmonyInstance.Patch(increaseBalanceMethod, prefix: new HarmonyMethod(increaseBalancePrefixMethod));

                    var checkSchemaMethod = databaseType.GetMethod("CheckSchema", c_BindingFlags) !;
                    harmonyInstance.NopPatch(checkSchemaMethod);

                    var checkSetupAccount = databaseType.GetMethod("CheckSetupAccount", c_BindingFlags) !;
                    harmonyInstance.NopPatch(checkSetupAccount);

                    var executeQueryMethod       = databaseType.GetMethod("ExecuteQuery", c_BindingFlags);
                    var executeQueryPrefixMethod = typeof(UconomyExecuteQueryPatch)
                                                   .GetMethod(nameof(UconomyExecuteQueryPatch.ExecuteQueryPrefix), c_BindingFlags);
                    harmonyInstance.Patch(executeQueryMethod, prefix: new HarmonyMethod(executeQueryPrefixMethod));

                    UconomyGetBalancePatch.OnPreGetBalance           += OnPreGetBalance;
                    UconomyBalanceIncreasePatch.OnPreIncreaseBalance += OnPreIncreaseBalance;

                    m_RocketModComponent.LifetimeScope.Disposer.AddInstanceForDisposal(new DisposeAction(() =>
                    {
                        harmonyInstance.UnpatchAll(UconomyIntegration.HarmonyId);

                        UconomyGetBalancePatch.OnPreGetBalance           -= OnPreGetBalance;
                        UconomyBalanceIncreasePatch.OnPreIncreaseBalance -= OnPreIncreaseBalance;
                    }));
                }
                else
                {
                    var logger = m_LoggerFactory.CreateLogger <RocketModIntegration>();
                    logger.LogWarning("Economy system was set to OpenMod_Uconomy but Uconomy is not loaded. Defaulting to Separate.");
                }
            }

            RemoveRocketCommandListeners();
            return(Task.CompletedTask);
        }
Exemplo n.º 2
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>();
        }