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); }
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>(); }