Decompiled source of Tesstopia v1.0.6

Tesstopia.dll

Decompiled 2 weeks ago
using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Logging;
using GameNetcodeStuff;
using HarmonyLib;
using LethalLib.Modules;
using Microsoft.CodeAnalysis;
using Tesstopia.Classes;
using Tesstopia.Patches;
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("Tesstopia")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("Tesstopia")]
[assembly: AssemblyTitle("Tesstopia")]
[assembly: AssemblyVersion("1.0.0.0")]
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;
		}
	}
}
namespace Tesstopia
{
	[BepInPlugin("Tesstopia.Tesstopia", "Tesstopia", "0.0.0.1")]
	public class TesstopiaModBase : BaseUnityPlugin
	{
		private const string modGUID = "Tesstopia.Tesstopia";

		private const string modName = "Tesstopia";

		private const string modVersion = "0.0.0.1";

		private readonly Harmony harmony = new Harmony("Tesstopia.Tesstopia");

		private static TesstopiaModBase Instance;

		internal ManualLogSource mls;

		private void Awake()
		{
			if ((Object)(object)Instance == (Object)null)
			{
				Instance = this;
			}
			mls = Logger.CreateLogSource("Tesstopia.Tesstopia");
			((Component)Instance).BroadcastMessage("Tesstopia BROADCAST");
			mls.LogInfo((object)"Tesstopia Hello World! The MOD HAS AWOKEN!! :)");
			((BaseUnityPlugin)this).Logger.LogInfo((object)"Tesstopia Mod running???");
			string text = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "tesstopiabundle");
			AssetBundle val = AssetBundle.LoadFromFile(text);
			Item val2 = val.LoadAsset<Item>("Assets/TessPlushie/Items/TesslaPlushie.asset");
			NetworkPrefabs.RegisterNetworkPrefab(val2.spawnPrefab);
			Utilities.FixMixerGroups(val2.spawnPrefab);
			Items.RegisterScrap(val2, 50, (LevelTypes)4);
			Item val3 = val.LoadAsset<Item>("Assets/TessPlushie/Items/BeeTessla.asset");
			TessPlushItem tessPlushItem = val3.spawnPrefab.AddComponent<TessPlushItem>();
			((GrabbableObject)tessPlushItem).grabbable = true;
			((GrabbableObject)tessPlushItem).grabbableToEnemies = true;
			((GrabbableObject)tessPlushItem).itemProperties = val3;
			NetworkPrefabs.RegisterNetworkPrefab(val3.spawnPrefab);
			Utilities.FixMixerGroups(val3.spawnPrefab);
			Items.RegisterScrap(val3, 50, (LevelTypes)16);
			Item val4 = val.LoadAsset<Item>("Assets/TessPlushie/Items/SheriffTessla.asset");
			TessPlushItem tessPlushItem2 = val4.spawnPrefab.AddComponent<TessPlushItem>();
			((GrabbableObject)tessPlushItem2).grabbable = true;
			((GrabbableObject)tessPlushItem2).grabbableToEnemies = true;
			((GrabbableObject)tessPlushItem2).itemProperties = val4;
			NetworkPrefabs.RegisterNetworkPrefab(val4.spawnPrefab);
			Utilities.FixMixerGroups(val4.spawnPrefab);
			Items.RegisterScrap(val4, 60, (LevelTypes)8);
			Item val5 = val.LoadAsset<Item>("Assets/TessPlushie/Items/WitchTessla.asset");
			TessPlushItem tessPlushItem3 = val5.spawnPrefab.AddComponent<TessPlushItem>();
			((GrabbableObject)tessPlushItem3).grabbable = true;
			((GrabbableObject)tessPlushItem3).grabbableToEnemies = true;
			((GrabbableObject)tessPlushItem3).itemProperties = val5;
			NetworkPrefabs.RegisterNetworkPrefab(val5.spawnPrefab);
			Utilities.FixMixerGroups(val5.spawnPrefab);
			Items.RegisterScrap(val5, 40, (LevelTypes)64);
			Item val6 = val.LoadAsset<Item>("Assets/TessPlushie/Items/BanditTessla.asset");
			TessPlushItem tessPlushItem4 = val6.spawnPrefab.AddComponent<TessPlushItem>();
			((GrabbableObject)tessPlushItem4).grabbable = true;
			((GrabbableObject)tessPlushItem4).grabbableToEnemies = true;
			((GrabbableObject)tessPlushItem4).itemProperties = val6;
			NetworkPrefabs.RegisterNetworkPrefab(val6.spawnPrefab);
			Utilities.FixMixerGroups(val6.spawnPrefab);
			Items.RegisterScrap(val6, 60, (LevelTypes)32);
			Item val7 = val.LoadAsset<Item>("Assets/TessPlushie/Items/FancyTessla.asset");
			NetworkPrefabs.RegisterNetworkPrefab(val7.spawnPrefab);
			Utilities.FixMixerGroups(val7.spawnPrefab);
			Items.RegisterScrap(val7, 30, (LevelTypes)128);
			Item val8 = val.LoadAsset<Item>("Assets/TessPlushie/Items/QueenTessla.asset");
			NetworkPrefabs.RegisterNetworkPrefab(val8.spawnPrefab);
			Utilities.FixMixerGroups(val8.spawnPrefab);
			Items.RegisterScrap(val8, 30, (LevelTypes)256);
			Item val9 = val.LoadAsset<Item>("Assets/TessPlushie/Items/GoldTessla.asset");
			NetworkPrefabs.RegisterNetworkPrefab(val9.spawnPrefab);
			Utilities.FixMixerGroups(val9.spawnPrefab);
			Items.RegisterScrap(val9, 1, (LevelTypes)4);
			Items.RegisterScrap(val9, 5, (LevelTypes)8);
			Items.RegisterScrap(val9, 3, (LevelTypes)16);
			Items.RegisterScrap(val9, 15, (LevelTypes)32);
			Items.RegisterScrap(val9, 5, (LevelTypes)64);
			Items.RegisterScrap(val9, 8, (LevelTypes)2048);
			Items.RegisterScrap(val9, 20, (LevelTypes)128);
			Items.RegisterScrap(val9, 20, (LevelTypes)256);
			Items.RegisterScrap(val9, 20, (LevelTypes)512);
			Items.RegisterScrap(val9, 20, (LevelTypes)4096);
			Items.RegisterScrap(val9, 60, (LevelTypes)8192);
			harmony.PatchAll(typeof(TesstopiaModBase));
			harmony.PatchAll();
			((BaseUnityPlugin)this).Logger.LogInfo((object)"Tesstopia Mod finished running???");
		}
	}
}
namespace Tesstopia.Patches
{
	[HarmonyPatch(typeof(PlayerControllerB))]
	internal static class PlayerControllerPatch
	{
		[HarmonyPostfix]
		[HarmonyPatch("DamagePlayer")]
		private static void DamagePlayerPostfixPatch(PlayerControllerB __instance, int damageNumber, CauseOfDeath causeOfDeath, bool fallDamage, Vector3 force)
		{
			if (hasActivatedItem(__instance, "Witch Tessla"))
			{
				__instance.takingFallDamage = false;
				__instance.criticallyInjured = false;
				__instance.health = 100;
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch("AllowPlayerDeath")]
		private static void AllowPlayerDeathPatch(PlayerControllerB __instance, ref bool __result)
		{
			if (hasActivatedItem(__instance, "Witch Tessla"))
			{
				__result = false;
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch("PlaceGrabbableObject")]
		private static void PlaceGrabbableObjectPatch(PlayerControllerB __instance)
		{
			updateBanditDoll(__instance);
		}

		[HarmonyPostfix]
		[HarmonyPatch("DespawnHeldObjectOnClient")]
		private static void DespawnHeldObjectOnClientPatch(PlayerControllerB __instance)
		{
			updateBanditDoll(__instance);
		}

		[HarmonyPostfix]
		[HarmonyPatch("DiscardHeldObject")]
		private static void DiscardHeldObjectPatch(PlayerControllerB __instance)
		{
			updateBanditDoll(__instance);
		}

		[HarmonyPostfix]
		[HarmonyPatch("DestroyItemInSlot")]
		private static void DestroyItemInSlotPatch(PlayerControllerB __instance)
		{
			updateBanditDoll(__instance);
		}

		[HarmonyPostfix]
		[HarmonyPatch("SetObjectAsNoLongerHeld")]
		private static void SetObjectAsNoLongerHeldPatch(PlayerControllerB __instance)
		{
			updateBanditDoll(__instance);
		}

		[HarmonyPostfix]
		[HarmonyPatch("BeginGrabObject")]
		private static void BeginGrabObjectPatch(PlayerControllerB __instance)
		{
			updateBanditDoll(__instance);
		}

		[HarmonyPostfix]
		[HarmonyPatch("GrabObject")]
		private static void GrabObjectPatch(PlayerControllerB __instance)
		{
			updateBanditDoll(__instance);
		}

		[HarmonyPostfix]
		[HarmonyPatch("GrabObjectClientRpc")]
		private static void GrabObjectClientRpcPatch(PlayerControllerB __instance)
		{
			updateBanditDoll(__instance);
		}

		private static void updateBanditDoll(PlayerControllerB __instance)
		{
			if (hasActivatedItem(__instance, "Brussel Bandit"))
			{
				updatePlayerWeight(__instance, 0.5f);
			}
			else
			{
				updatePlayerWeight(__instance);
			}
		}

		public static void updatePlayerWeight(PlayerControllerB __instance, float strMod = 1f)
		{
			float num = 1f;
			for (int i = 0; i < __instance.ItemSlots.Length; i++)
			{
				GrabbableObject val = __instance.ItemSlots[i];
				if (!((Object)(object)val == (Object)null))
				{
					num = Mathf.Clamp(num + (__instance.ItemSlots[i].itemProperties.weight - 1f), 1f, 10f);
				}
			}
			if (num < 1f)
			{
				__instance.carryWeight = 1f;
			}
			else
			{
				__instance.carryWeight = Mathf.Clamp(num * strMod, 1f, 10f);
			}
		}

		public static bool hasActivatedItem(PlayerControllerB __instance, string name)
		{
			for (int i = 0; i < __instance.ItemSlots.Length; i++)
			{
				GrabbableObject val = __instance.ItemSlots[i];
				if (!((Object)(object)val == (Object)null) && __instance.ItemSlots[0].isBeingUsed && __instance.ItemSlots[0].itemProperties.itemName == name)
				{
					return true;
				}
			}
			return false;
		}
	}
	[HarmonyPatch(typeof(RoundManager))]
	internal static class RoundManagerPatch
	{
	}
}
namespace Tesstopia.Classes
{
	internal class AnimateItem : PhysicsProp
	{
	}
	internal class TessPlushItem : GrabbableObject
	{
		public override void ItemActivate(bool used, bool buttonDown = true)
		{
			((GrabbableObject)this).ItemActivate(used, buttonDown);
			toggleAbility(!base.isBeingUsed);
			if (!(base.itemProperties.itemName == "Witch Tessla"))
			{
			}
		}

		public override void UseUpBatteries()
		{
			((GrabbableObject)this).UseUpBatteries();
			toggleAbility(isActive: false);
		}

		public override void DiscardItem()
		{
			toggleAbility(isActive: false);
			((GrabbableObject)this).DiscardItem();
		}

		private void toggleAbility(bool isActive)
		{
			if ((Object)(object)base.playerHeldBy == (Object)null)
			{
				return;
			}
			base.isBeingUsed = isActive;
			if (base.itemProperties.itemName == "Beesla")
			{
				if (isActive)
				{
					base.playerHeldBy.jumpForce = 20f;
				}
				else
				{
					base.playerHeldBy.jumpForce = 13f;
				}
			}
			else if (base.itemProperties.itemName == "Sheriff Tessla")
			{
				if (isActive)
				{
					base.playerHeldBy.movementSpeed = 10f;
					base.playerHeldBy.sprintTime = 10f;
				}
				else
				{
					base.playerHeldBy.movementSpeed = 5f;
					base.playerHeldBy.sprintTime = 5f;
				}
			}
			else if (base.itemProperties.itemName == "Brussel Bandit")
			{
				if (isActive)
				{
					PlayerControllerPatch.updatePlayerWeight(base.playerHeldBy, 0.5f);
					base.playerHeldBy.sprintTime = 20f;
				}
				else
				{
					PlayerControllerPatch.updatePlayerWeight(base.playerHeldBy);
					base.playerHeldBy.sprintTime = 5f;
				}
			}
			else if (!(base.itemProperties.itemName == "Witch Tessla"))
			{
			}
		}
	}
}