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 Team Fortress 2 Models v0.1.1
Nordbo.TF2Skins.dll
Decompiled 2 years agousing System; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using ModelReplacement; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: AssemblyCompany("Nordbo.TF2Skins")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("TF2Skins")] [assembly: AssemblyTitle("Nordbo.TF2Skins")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.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.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [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 TF2Skins { public class EngineerReplacement : BodyReplacementBase { protected override GameObject? LoadAssetsAndReturnModel() { GameObject val = Assets.mainAssetBundle.LoadAsset<GameObject>("engineer"); if ((Object)(object)val == (Object)null) { Plugin.Logger.LogError((object)"engineer asset is not found in the asset bundle."); } else { Plugin.Logger.LogInfo((object)"engineer asset loaded successfully."); } return val; } } public class SpyReplacement : BodyReplacementBase { protected override GameObject? LoadAssetsAndReturnModel() { GameObject val = Assets.mainAssetBundle.LoadAsset<GameObject>("spy"); if ((Object)(object)val == (Object)null) { Plugin.Logger.LogError((object)"spy asset is not found in the asset bundle."); } else { Plugin.Logger.LogInfo((object)"spy asset loaded successfully."); } return val; } } public class SniperReplacement : BodyReplacementBase { protected override GameObject? LoadAssetsAndReturnModel() { GameObject val = Assets.mainAssetBundle.LoadAsset<GameObject>("sniper"); if ((Object)(object)val == (Object)null) { Plugin.Logger.LogError((object)"sniper asset is not found in the asset bundle."); } else { Plugin.Logger.LogInfo((object)"sniper asset loaded successfully."); } return val; } } public class ScoutReplacement : BodyReplacementBase { protected override GameObject? LoadAssetsAndReturnModel() { GameObject val = Assets.mainAssetBundle.LoadAsset<GameObject>("scout"); if ((Object)(object)val == (Object)null) { Plugin.Logger.LogError((object)"scout asset is not found in the asset bundle."); } else { Plugin.Logger.LogInfo((object)"scout asset loaded successfully."); } return val; } } public class PyroReplacement : BodyReplacementBase { protected override GameObject? LoadAssetsAndReturnModel() { GameObject val = Assets.mainAssetBundle.LoadAsset<GameObject>("pyro"); if ((Object)(object)val == (Object)null) { Plugin.Logger.LogError((object)"pyro asset is not found in the asset bundle."); } else { Plugin.Logger.LogInfo((object)"pyro asset loaded successfully."); } return val; } } public class DemoReplacement : BodyReplacementBase { protected override GameObject? LoadAssetsAndReturnModel() { GameObject val = Assets.mainAssetBundle.LoadAsset<GameObject>("demoman"); if ((Object)(object)val == (Object)null) { Plugin.Logger.LogError((object)"demoman asset is not found in the asset bundle."); } else { Plugin.Logger.LogInfo((object)"demoman asset loaded successfully."); } return val; } } public class SoldierReplacement : BodyReplacementBase { protected override GameObject? LoadAssetsAndReturnModel() { GameObject val = Assets.mainAssetBundle.LoadAsset<GameObject>("soldier"); if ((Object)(object)val == (Object)null) { Plugin.Logger.LogError((object)"soldier asset is not found in the asset bundle."); } else { Plugin.Logger.LogInfo((object)"soldier asset loaded successfully."); } return val; } } public class HeavyReplacement : BodyReplacementBase { protected override GameObject? LoadAssetsAndReturnModel() { GameObject val = Assets.mainAssetBundle.LoadAsset<GameObject>("heavy"); if ((Object)(object)val == (Object)null) { Plugin.Logger.LogError((object)"heavy asset is not found in the asset bundle."); } else { Plugin.Logger.LogInfo((object)"heavy asset loaded successfully."); } return val; } } public class MedicReplacement : BodyReplacementBase { protected override GameObject? LoadAssetsAndReturnModel() { GameObject val = Assets.mainAssetBundle.LoadAsset<GameObject>("medic"); if ((Object)(object)val == (Object)null) { Plugin.Logger.LogError((object)"medic asset is not found in the asset bundle."); } else { Plugin.Logger.LogInfo((object)"medic asset loaded successfully."); } return val; } } public class SaxtonReplacement : BodyReplacementBase { protected override GameObject? LoadAssetsAndReturnModel() { GameObject val = Assets.mainAssetBundle.LoadAsset<GameObject>("Saxton"); if ((Object)(object)val == (Object)null) { Plugin.Logger.LogError((object)"Saxton asset is not found in the asset bundle."); } else { Plugin.Logger.LogInfo((object)"Saxton asset loaded successfully."); } return val; } } [BepInPlugin("nordbo.TF2Skins", "Team Fortress 2 Models", "1.0.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Plugin : BaseUnityPlugin { private const string modGUID = "nordbo.TF2Skins"; private const string modName = "Team Fortress 2 Models"; private const string modVersion = "1.0.0"; internal static ManualLogSource Logger { get; private set; } internal static Harmony? Harmony { get; set; } private void Awake() { //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Expected O, but got Unknown Logger = Logger.CreateLogSource("Team Fortress 2 Models"); Logger.LogInfo((object)"Loading plugin nordbo.TF2Skins"); string location = Assembly.GetExecutingAssembly().Location; string directoryName = Path.GetDirectoryName(location); Assets.PopulateAssets(directoryName); if ((Object)(object)Assets.mainAssetBundle == (Object)null) { Logger.LogError((object)"Asset bundle failed to load."); return; } RegisterModels(); Harmony = new Harmony("nordbo.TF2Skins"); Harmony.PatchAll(); Logger.LogInfo((object)"Plugin nordbo.TF2Skins is loaded!"); } private void RegisterModels() { if ((Object)(object)Assets.mainAssetBundle != (Object)null) { ModelReplacementAPI.RegisterSuitModelReplacement("Engineer", typeof(EngineerReplacement)); ModelReplacementAPI.RegisterSuitModelReplacement("Spy", typeof(SpyReplacement)); ModelReplacementAPI.RegisterSuitModelReplacement("Sniper", typeof(SniperReplacement)); ModelReplacementAPI.RegisterSuitModelReplacement("Pyro", typeof(PyroReplacement)); ModelReplacementAPI.RegisterSuitModelReplacement("Demoman", typeof(DemoReplacement)); ModelReplacementAPI.RegisterSuitModelReplacement("Scout", typeof(ScoutReplacement)); ModelReplacementAPI.RegisterSuitModelReplacement("Soldier", typeof(SoldierReplacement)); ModelReplacementAPI.RegisterSuitModelReplacement("Heavy", typeof(HeavyReplacement)); ModelReplacementAPI.RegisterSuitModelReplacement("Medic", typeof(MedicReplacement)); ModelReplacementAPI.RegisterSuitModelReplacement("Saxton", typeof(SaxtonReplacement)); } else { Logger.LogError((object)"Failed to load asset bundle."); } } } public static class Assets { public static string mainAssetBundleName = "tf2bundle"; public static AssetBundle mainAssetBundle; private static string GetAssemblyName() { return Assembly.GetExecutingAssembly().FullName.Split(',')[0]; } public static void PopulateAssets(string path) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown if ((Object)mainAssetBundle == (Object)null) { mainAssetBundle = AssetBundle.LoadFromFile(Path.Combine(path, mainAssetBundleName)); } } } public static class MyPluginInfo { public const string PLUGIN_GUID = "Nordbo.TF2Skins"; public const string PLUGIN_NAME = "TF2Skins"; public const string PLUGIN_VERSION = "1.0.0"; } } namespace TF2Skins.Patches { [HarmonyPatch(typeof(TVScript))] public class ExampleTVPatch { [HarmonyPatch("SwitchTVLocalClient")] [HarmonyPrefix] private static void SwitchTVPrefix(TVScript __instance) { StartOfRound.Instance.shipRoomLights.SetShipLightsBoolean(__instance.tvOn); } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }