using GearsAPI.Settings; using GearsAPI.Settings.Global; using GearsAPI.Settings.World; using HarmonyLib; using KFCommonUtilityLib; using KFCommonUtilityLib.Scripts.StaticManagers; using KFCommonUtilityLib.Scripts.Utilities; using System.Reflection; using System.Runtime.InteropServices; public class CommonUtilityLibInit : IModApi { private static bool inited = false; internal static Harmony HarmonyInstance { get; private set; } public void InitMod(Mod _modInstance) { if (inited) return; inited = true; Log.Out(" Loading Patch: " + GetType()); unsafe { Log.Out($"size of MultiActionIndice: {sizeof(MultiActionIndice)} marshal size: {Marshal.SizeOf()}"); Log.Out($"{AccessTools.Method(typeof(ItemActionRanged), nameof(ItemActionRanged.StartHolding)).FullDescription()}"); } //QualitySettings.streamingMipmapsMemoryBudget = 4096; DelayLoadModuleManager.RegisterDelayloadDll("FullautoLauncher", "FullautoLauncherAnimationRiggingCompatibilityPatch"); DelayLoadModuleManager.RegisterDelayloadDll("Quartz", "QuartzUIPatch"); //DelayLoadModuleManager.RegisterDelayloadDll("SMXcore", "SMXMultiActionCompatibilityPatch"); //DelayLoadModuleManager.RegisterDelayloadDll("SCore", "SCoreEntityHitCompatibilityPatch"); CustomEffectEnumManager.RegisterEnumType(); CustomEffectEnumManager.RegisterEnumType(); ModuleManagers.ClearOutputFolder(); ItemClassModuleManager.Init(); ItemActionModuleManager.Init(); ModEvents.GameAwake.RegisterHandler(CommonUtilityPatch.InitShotStates); ModEvents.GameAwake.RegisterHandler(CustomEffectEnumManager.InitDefault); ModEvents.GameAwake.RegisterHandler(DelayLoadModuleManager.DelayLoad); //ModEvents.GameAwake.RegisterHandler(AssemblyLocator.Init); ModEvents.GameAwake.RegisterHandler(MultiActionUtils.SetMinEventArrays); ModEvents.GameStartDone.RegisterHandler(RegisterKFEnums); //DOES NOT WORK ON MULTIPLAYER? Patch to ItemClass.LateInitAll //ModEvents.GameStartDone.RegisterHandler(AnimationRiggingManager.ParseItemIDs); ModEvents.GameStartDone.RegisterHandler(MultiActionManager.PostloadCleanup); //ModEvents.GameStartDone.RegisterHandler(CustomEffectEnumManager.PrintResults); //ModEvents.GameUpdate.RegisterHandler(CommonUtilityPatch.ForceUpdateGC); HarmonyInstance = new Harmony(GetType().ToString()); HarmonyInstance.PatchAll(Assembly.GetExecutingAssembly()); } private static void RegisterKFEnums() { CustomEnums.onSelfMagzineDeplete = CustomEffectEnumManager.RegisterOrGetEnum("onSelfMagzineDeplete"); CustomEnums.onReloadAboutToStart = CustomEffectEnumManager.RegisterOrGetEnum("onReloadAboutToStart"); CustomEnums.onRechargeValueUpdate = CustomEffectEnumManager.RegisterOrGetEnum("onRechargeValueUpdate"); CustomEnums.onSelfItemSwitchMode = CustomEffectEnumManager.RegisterOrGetEnum("onSelfItemSwitchMode"); CustomEnums.onSelfBurstModeChanged = CustomEffectEnumManager.RegisterOrGetEnum("onSelfBurstModeChanged"); CustomEnums.onSelfFirstCVarSync = CustomEffectEnumManager.RegisterOrGetEnum("onSelfFirstCVarSync"); CustomEnums.onSelfHoldingItemAssemble = CustomEffectEnumManager.RegisterOrGetEnum("onSelfHoldingItemAssemble"); CustomEnums.ReloadSpeedRatioFPV2TPV = CustomEffectEnumManager.RegisterOrGetEnum("ReloadSpeedRatioFPV2TPV"); CustomEnums.RecoilSnappiness = CustomEffectEnumManager.RegisterOrGetEnum("RecoilSnappiness"); CustomEnums.RecoilReturnSpeed = CustomEffectEnumManager.RegisterOrGetEnum("RecoilReturnSpeed"); //CustomEnums.ProjectileImpactDamagePercentBlock = CustomEffectEnumManager.RegisterOrGetEnum("ProjectileImpactDamagePercentBlock"); //CustomEnums.ProjectileImpactDamagePercentEntity = CustomEffectEnumManager.RegisterOrGetEnum("ProjectileImpactDamagePercentEntity"); CustomEnums.PartialReloadCount = CustomEffectEnumManager.RegisterOrGetEnum("PartialReloadCount"); CustomEnums.CustomTaggedEffect = CustomEffectEnumManager.RegisterOrGetEnum("CustomTaggedEffect"); CustomEnums.KickDegreeHorizontalModifier = CustomEffectEnumManager.RegisterOrGetEnum("KickDegreeHorizontalModifier"); CustomEnums.KickDegreeVerticalModifier = CustomEffectEnumManager.RegisterOrGetEnum("KickDegreeVerticalModifier"); CustomEnums.WeaponErgonomics = CustomEffectEnumManager.RegisterOrGetEnum("WeaponErgonomics"); CustomEnums.RecoilCameraShakeStrength = CustomEffectEnumManager.RegisterOrGetEnum("RecoilCameraShakeStrength"); CustomEnums.BurstShotInterval = CustomEffectEnumManager.RegisterOrGetEnum("BurstShotInterval"); CustomEnums.MaxWeaponSpread = CustomEffectEnumManager.RegisterOrGetEnum("MaxWeaponSpread"); } } public class GearsImpl : IGearsModApi { public void InitMod(IGearsMod modInstance) { } public void OnGlobalSettingsLoaded(IModGlobalSettings modSettings) { RecoilManager.InitRecoilSettings(modSettings); } public void OnWorldSettingsLoaded(IModWorldSettings worldSettings) { } }