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 Portal Turret Models v1.0.2
BepInEx/plugins/PortalTurrets.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.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using HarmonyLib; using Microsoft.CodeAnalysis; 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: AssemblyCompany("PortalTurrets")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("A mod that replaces the in game turrets with the ones from Portal.")] [assembly: AssemblyFileVersion("1.0.2.0")] [assembly: AssemblyInformationalVersion("1.0.2")] [assembly: AssemblyProduct("PortalTurrets")] [assembly: AssemblyTitle("PortalTurrets")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.2.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 PortalTurrets { [BepInPlugin("walterman.plugins.portalturrets", "PortalTurrets", "1.0.2")] [BepInProcess("Lethal Company.exe")] public class PortalTurretBase : BaseUnityPlugin { private const string MOD_GUID = "walterman.plugins.portalturrets"; private const string MOD_NAME = "PortalTurrets"; private const string MOD_VERSION = "1.0.2"; private ConfigEntry<bool> configShowLaser; private GameObject portalTurretPrefab; public static PortalTurretBase Instance { get; private set; } private void Awake() { //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Expected O, but got Unknown ((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin walterman.plugins.portalturrets is loaded!"); if ((Object)(object)Instance != (Object)null) { ((BaseUnityPlugin)this).Logger.LogError((object)"More than one PortalTurretBase instance"); } Instance = this; BindConfig(); Harmony val = new Harmony("walterman.plugins.portalturrets"); val.PatchAll(); string path = "turretasset"; string filePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), path); LoadAssetBundle(filePath); } private void LoadAssetBundle(string filePath) { AssetBundle val = AssetBundle.LoadFromFile(filePath); if ((Object)(object)val != (Object)null) { GameObject val2 = val.LoadAsset<GameObject>("PortalTurret"); val.Unload(false); portalTurretPrefab = val2; } else { ((BaseUnityPlugin)this).Logger.LogError((object)("Failed to load asset bundle from " + filePath)); } } private void BindConfig() { configShowLaser = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "ShowLaser", true, "Whether or not turrets show the laser from their eye"); } public bool GetShowLaser() { return configShowLaser.Value; } public Transform GetPortalTurretPrefab() { return portalTurretPrefab.transform; } public void Log(string message) { ((BaseUnityPlugin)this).Logger.LogInfo((object)(message ?? "")); } public void LogError(string message) { ((BaseUnityPlugin)this).Logger.LogError((object)(message ?? "")); } } public static class PluginInfo { public const string PLUGIN_GUID = "PortalTurrets"; public const string PLUGIN_NAME = "PortalTurrets"; public const string PLUGIN_VERSION = "1.0.2"; } } namespace PortalTurrets.Patches { [HarmonyPatch(typeof(Turret))] internal class TurretPatch { private static PortalTurretBase pluginBase = PortalTurretBase.Instance; private static Dictionary<Turret, Transform> turretDictionary = new Dictionary<Turret, Transform>(); [HarmonyPrefix] [HarmonyPatch("Start")] private static void TurretPatchStart(Turret __instance, ref Transform ___centerPoint, ref float ___rotationRange, ref Animator ___turretAnimator, ref ParticleSystem ___bulletParticles) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) Transform parent = ((Component)__instance).transform.parent; Transform meshContainer = parent.Find("MeshContainer"); Vector3 val = ___centerPoint.position - new Vector3(0f, 1.4968f, 0f); Quaternion rotation = ___centerPoint.rotation; Transform val2 = Object.Instantiate<Transform>(pluginBase.GetPortalTurretPrefab(), val, rotation, parent); ((Object)val2).name = "PortalTurret"; ___turretAnimator = ((Component)val2).GetComponentInChildren<Animator>(); ___bulletParticles = ((Component)val2).GetComponentInChildren<ParticleSystem>(); bool showLaser = pluginBase.GetShowLaser(); ((Component)val2.GetChild(2)).gameObject.SetActive(showLaser); DisableMeshRenderers(meshContainer); turretDictionary[__instance] = val2; } [HarmonyPostfix] [HarmonyPatch("Update")] private static void TurretPatchUpdate(Turret __instance, ref Animator ___turretAnimator, ref Transform ___turretRod) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) if (turretDictionary.TryGetValue(__instance, out var value)) { ((Component)((Component)value).GetComponentInChildren<ParticleSystem>()).transform.rotation = ___turretRod.rotation; Transform child = value.GetChild(2); UpdateLaserPosition(((Component)child).GetComponent<LineRenderer>(), child, ___turretRod.rotation); if (___turretAnimator.GetInteger("TurretMode") == 0) { Quaternion rotation = value.GetChild(0).rotation; Quaternion rotation2 = value.rotation; float num = Mathf.Clamp01(4f * Time.deltaTime); value.GetChild(0).rotation = Quaternion.Lerp(rotation, rotation2, num); } else { value.GetChild(0).rotation = ___turretRod.rotation; } } } private static void DisableMeshRenderers(Transform meshContainer) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown foreach (Transform item in ((Component)meshContainer).transform) { Transform val = item; MeshRenderer component = ((Component)val).GetComponent<MeshRenderer>(); if ((Object)(object)component != (Object)null && !((Object)val).name.Contains("Plane")) { ((Renderer)component).enabled = false; } DisableMeshRenderers(((Component)val).transform); } } private static void UpdateLaserPosition(LineRenderer laser, Transform startPoint, Quaternion rodRotation) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) startPoint.rotation = rodRotation; laser.SetPosition(0, startPoint.position); RaycastHit val = default(RaycastHit); if (Physics.Raycast(startPoint.position, startPoint.forward, ref val)) { laser.SetPosition(1, ((RaycastHit)(ref val)).point); } else { laser.SetPosition(1, startPoint.position + startPoint.forward * 100f); } } } }