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 ToothlessDanceEmote v1.0.4
ToothlessDanceEmote.dll
Decompiled 2 years agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using CustomEmotesAPI_Template_Mod; using EmotesAPI; using Microsoft.CodeAnalysis; using Toothless_Dance_Emote; 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("Lethal Company CustomEmotesAPI Template Mod")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Lethal Company CustomEmotesAPI Template Mod")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("199912ba-43b6-4276-b420-7bfaa3eedbe5")] [assembly: AssemblyFileVersion("1.0.4.0")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.4.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace Toothless_Dance_Emote { [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("sirbananacat.toothless_dance_emote", "Toothless Dance Emote", "1.0.4")] public class ExampleEmoteMod : BaseUnityPlugin { public const string PluginGUID = "sirbananacat.toothless_dance_emote"; public const string PluginName = "Toothless Dance Emote"; public const string PluginVersion = "1.0.4"; public static ExampleEmoteMod instance; public static PluginInfo PInfo { get; private set; } public void Awake() { //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Expected O, but got Unknown //IL_00f5: Unknown result type (might be due to invalid IL or missing references) instance = this; PInfo = ((BaseUnityPlugin)this).Info; if (Directory.Exists(Path.Combine(Path.GetDirectoryName(PInfo.Location), "assetbundles"))) { Assets.LoadAssetBundlesFromFolder("assetbundles", check: true); } else { Assets.LoadAssetBundlesFromFolder(""); } AnimationClipParams val = new AnimationClipParams(); val.animationClip = new List<AnimationClip> { Assets.Load<AnimationClip>("assets/toothless dance.anim") }.ToArray(); val.secondaryAnimation = null; val.looping = true; val._primaryAudioClips = new List<AudioClip> { Assets.Load<AudioClip>("assets/driftveil city.mp3") }.ToArray(); val._secondaryAudioClips = null; val._primaryDMCAFreeAudioClips = null; val._secondaryDMCAFreeAudioClips = null; val.visible = true; val.syncAnim = true; val.syncAudio = true; val.startPref = -1; val.joinPref = -1; val.joinSpots = null; val.customName = "Toothless Dance"; val.lockType = (LockType)1; val.willGetClaimedByDMCA = false; val.audioLevel = 0.7f; CustomEmotesAPI.AddCustomAnimation(val); } } } namespace CustomEmotesAPI_Template_Mod { public static class Assets { internal static readonly List<AssetBundle> AssetBundles = new List<AssetBundle>(); private static readonly Dictionary<string, int> AssetIndices = new Dictionary<string, int>(); public static void LoadAssetBundlesFromFolder(string folderName, bool check = false) { folderName = ((!check) ? Path.GetDirectoryName(ExampleEmoteMod.PInfo.Location) : Path.Combine(Path.GetDirectoryName(ExampleEmoteMod.PInfo.Location), folderName)); string[] files = Directory.GetFiles(folderName); foreach (string text in files) { if (Path.HasExtension(text)) { continue; } AssetBundle val = AssetBundle.LoadFromFile(text); int count = AssetBundles.Count; AssetBundles.Add(val); string[] allAssetNames = val.GetAllAssetNames(); foreach (string text2 in allAssetNames) { string text3 = text2.ToLowerInvariant(); if (text3.StartsWith("assets/")) { text3 = text3.Remove(0, "assets/".Length); } AssetIndices[text3] = count; } DebugClass.Log((object)("Loaded AssetBundle: " + Path.GetFileName(text))); } } public static T Load<T>(string assetName) where T : Object { try { assetName = assetName.ToLowerInvariant(); if (assetName.Contains(":")) { string[] array = assetName.Split(':'); assetName = array[1].ToLowerInvariant(); } if (assetName.StartsWith("assets/")) { assetName = assetName.Remove(0, "assets/".Length); } int index = AssetIndices[assetName]; return AssetBundles[index].LoadAsset<T>("assets/" + assetName); } catch (Exception arg) { DebugClass.Log((object)$"Couldn't load asset [{assetName}] reason: {arg}"); return default(T); } } } }