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"))
{
}
}
}
}