Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of FrenchFurryTwitchGang v1.0.1
FrenchFurryTwitchGang.dll
Decompiled 2 years agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using FrenchFurryTwitchGang.Patches; using HarmonyLib; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("FrenchFurryTwitchGang")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("FrenchFurryTwitchGang")] [assembly: AssemblyCopyright("Copyright © 2024")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("b6ea1290-0853-49bb-a534-67b87a7bdd92")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] namespace FrenchFurryTwitchGang { [BepInPlugin("AddranorLive-FrenchFurryTwitchGang", "FrenchFurryTwitchGang", "0.0.1.0")] public class Plugin : BaseUnityPlugin { internal const string modGUID = "AddranorLive-FrenchFurryTwitchGang"; internal const string modName = "FrenchFurryTwitchGang"; internal const string modVersion = "0.0.1.0"; internal readonly Harmony harmony = new Harmony("AddranorLive-FrenchFurryTwitchGang"); internal static Plugin Instance; internal static ManualLogSource MLS; internal static AssetBundle ModBundle; internal static string Location; internal static ConfigEntry<bool> c_Airhorn_Chapho; internal static ConfigEntry<bool> c_Airhorn_Bluedragon; internal static ConfigEntry<bool> c_Airhorn_StanRenart; internal static ConfigEntry<bool> c_Clohorn_Bluedragon; internal static ConfigEntry<bool> c_Clohorn_StanRenart; internal static ConfigEntry<bool> c_Clohorn_DodgerAkame; private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } Location = ((BaseUnityPlugin)Instance).Info.Location.TrimEnd("AddranorLive-FrenchFurryTwitchGang.dll".ToCharArray()); ModBundle = AssetBundle.LoadFromFile(Location + "frenchfurrytwitchgang"); MLS = Logger.CreateLogSource("AddranorLive-FrenchFurryTwitchGang"); PatchNoisemakerProp.AirhornPackages = new List<NoiseMakerPackage>(); PatchNoisemakerProp.ClohornPackages = new List<NoiseMakerPackage>(); AddNewAirHorn(ref c_Airhorn_Chapho, "Chaphogriff"); AddNewAirHorn(ref c_Airhorn_Bluedragon, "BlueDragon"); AddNewAirHorn(ref c_Airhorn_StanRenart, "StanRenart"); AddNewClownHorn(ref c_Clohorn_Bluedragon, "BlueDragon"); AddNewClownHorn(ref c_Clohorn_StanRenart, "StanRenart"); AddNewClownHorn(ref c_Clohorn_DodgerAkame, "DodgerAkame"); if ((Object)(object)ModBundle != (Object)null) { harmony.PatchAll(typeof(Plugin)); harmony.PatchAll(typeof(PatchNoisemakerProp)); LogInfo("Mod has been initialized."); } else { LogError("Initialization failed !"); } } public void AddNewAirHorn(ref ConfigEntry<bool> config, string prefix) { BindConfig(ref config, "Airhorn", prefix); if (config.Value) { PatchNoisemakerProp.AirhornPackages.Add(new NoiseMakerPackage("airhorn", prefix.ToLower())); LogInfo("New Entry : " + prefix + " airhorn added."); } } public void AddNewClownHorn(ref ConfigEntry<bool> config, string prefix) { BindConfig(ref config, "Clownhorn", prefix); if (config.Value) { PatchNoisemakerProp.ClohornPackages.Add(new NoiseMakerPackage("clownhorn", prefix.ToLower())); LogInfo("New Entry : " + prefix + " clownhorn added."); } } public static void LogInfo(object info) { MLS.LogInfo((object)(info?.ToString() + " (AddranorLive_LethalMods)")); } public static void LogWarning(object warning) { MLS.LogWarning((object)(warning?.ToString() + " (AddranorLive_LethalMods)")); } public static void LogError(object error) { MLS.LogError((object)(error?.ToString() + " (AddranorLive_LethalMods)")); } public void BindConfig(ref ConfigEntry<bool> config, string section, string key, bool defaultValue = true) { config = ((BaseUnityPlugin)this).Config.Bind<bool>(section, key, defaultValue, "Enables \"" + key + "\"'x custom SFX and custom texture for the " + section + "."); } } public class NoiseMakerPackage { public string Name; public float ClipDuration; public AudioClip RegularClip; public AudioClip FarClip; public Texture2D Texture; public NoiseMakerPackage(string item, string prefix) { RegularClip = Plugin.ModBundle.LoadAssetWithSubAssets<AudioClip>("assets/frenchfurrytwitchgang/" + prefix + "/" + item + "_" + prefix + ".wav")[0]; FarClip = Plugin.ModBundle.LoadAssetWithSubAssets<AudioClip>("assets/frenchfurrytwitchgang/" + prefix + "/" + item + "_" + prefix + "_Far.wav")[0]; Texture = Plugin.ModBundle.LoadAssetWithSubAssets<Texture2D>("assets/frenchfurrytwitchgang/" + prefix + "/Texture_" + prefix + ".png")[0]; ClipDuration = RegularClip.length + 0.1f; Name = prefix; } } } namespace FrenchFurryTwitchGang.Patches { internal class PatchNoisemakerProp { internal static List<NoiseMakerPackage> AirhornPackages; internal static List<NoiseMakerPackage> ClohornPackages; internal static int __randomNumber; [HarmonyPatch(typeof(NoisemakerProp), "Start")] [HarmonyPostfix] private static void AudioPatch(NoisemakerProp __instance) { if (AirhornPackages.Count == 0 && ClohornPackages.Count == 0) { return; } if (((Object)((GrabbableObject)__instance).itemProperties).name == "Airhorn") { if (AirhornPackages.Count == 0) { return; } __randomNumber = new Random().Next(0, AirhornPackages.Count); ((GrabbableObject)__instance).useCooldown = AirhornPackages[__randomNumber].ClipDuration; __instance.noiseSFX[0] = AirhornPackages[__randomNumber].RegularClip; __instance.noiseSFXFar[0] = AirhornPackages[__randomNumber].FarClip; ((Renderer)((Component)__instance).GetComponent<MeshRenderer>()).materials[0].mainTexture = (Texture)(object)AirhornPackages[__randomNumber].Texture; } if (((Object)((GrabbableObject)__instance).itemProperties).name == "ClownHorn" && ClohornPackages.Count != 0) { __randomNumber = new Random().Next(0, ClohornPackages.Count); ((GrabbableObject)__instance).useCooldown = ClohornPackages[__randomNumber].ClipDuration; __instance.noiseSFX[0] = ClohornPackages[__randomNumber].RegularClip; __instance.noiseSFXFar[0] = ClohornPackages[__randomNumber].FarClip; ((Renderer)((Component)__instance).GetComponent<MeshRenderer>()).materials[0].mainTexture = (Texture)(object)ClohornPackages[__randomNumber].Texture; } } } }