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 TombstoneDriveBy v1.0.0
plugins\TombstoneDriveBy.dll
Decompiled 9 months agousing System; using System.CodeDom.Compiler; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Globalization; using System.Linq; using System.Reflection; using System.Resources; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using HarmonyLib; using Jotunn; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("TombstoneDriveBy")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("TombstoneDriveBy")] [assembly: AssemblyCopyright("Copyright © 2021")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("e3243d22-4307-4008-ba36-9f326008cde5")] [assembly: AssemblyFileVersion("1.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] namespace TombstoneDriveBy { [BepInPlugin("sephalon.TombstoneDriveBy", "TombstoneDriveBy", "1.0.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] [HarmonyPatch] internal class TombstoneDriveBy : BaseUnityPlugin { [HarmonyPatch(typeof(TombStone), "Interact")] public static class Interact_Patch { private static bool Prefix(TombStone __instance, Humanoid character, bool hold, bool alt) { Logger.LogMessage((object)"Interact_Patch"); if (hold) { return false; } if (__instance.m_container.GetInventory().NrOfItems() == 0) { return false; } if (!__instance.m_localOpened) { Game.instance.IncrementPlayerStat((PlayerStatType)((__instance.GetOwnerName() == Game.instance.GetPlayerProfile().GetName()) ? 52 : 53), 1f); } if (__instance.IsOwner()) { currentTombStone = __instance; __instance.m_container.TakeAll(character); __instance.GiveBoost(); return false; } Logger.LogMessage((object)"Somehow not the owner"); return false; } } [HarmonyPatch(typeof(TombStone), "GiveBoost")] public static class GiveBoost_Patch { private static void Postfix(TombStone __instance) { StatusEffect lootStatusEffect = __instance.m_lootStatusEffect; SE_Stats val = (SE_Stats)(object)((lootStatusEffect is SE_Stats) ? lootStatusEffect : null); if (val != null) { Player val2 = __instance.FindOwner(); if (Object.op_Implicit((Object)(object)val2)) { ((Character)val2).m_seman.RemoveStatusEffect((StatusEffect)(object)val, true); StatusEffect obj = ((StatusEffect)val).Clone(); SE_Stats val3 = (SE_Stats)(object)((obj is SE_Stats) ? obj : null); ((Object)val3).name = "TombstoneDriveByCorpseRun"; val3.m_addMaxCarryWeight = GetCorpseRunCarryBonus(); ((Character)val2).m_seman.AddStatusEffect((StatusEffect)(object)val3, true, 0, 0f); } } } } public const string PluginGUID = "sephalon.TombstoneDriveBy"; public const string PluginName = "TombstoneDriveBy"; public const string PluginVersion = "1.0.0"; public const string CustomCorpseRunName = "TombstoneDriveByCorpseRun"; public ConfigEntry<int> config_corpseRunBuffValue; public static TombstoneDriveBy Instance; public List<ItemType> typePriority; public static TombStone currentTombStone; public void Awake() { //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Expected O, but got Unknown Instance = this; currentTombStone = null; ((BaseUnityPlugin)this).Config.SaveOnConfigSet = true; config_corpseRunBuffValue = ((BaseUnityPlugin)this).Config.Bind<int>("Config", "CorpseRunCarryBonus", 150, new ConfigDescription("The carry weight bonus when the corpse run buff is applied", (AcceptableValueBase)null, Array.Empty<object>())); SetUpPriorities(); Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "sephalon.TombstoneDriveBy"); } public void SetUpPriorities() { typePriority = new List<ItemType>(); typePriority.Add((ItemType)7); typePriority.Add((ItemType)11); typePriority.Add((ItemType)6); typePriority.Add((ItemType)17); typePriority.Add((ItemType)18); typePriority.Add((ItemType)5); typePriority.Add((ItemType)14); typePriority.Add((ItemType)22); typePriority.Add((ItemType)20); typePriority.Add((ItemType)3); typePriority.Add((ItemType)4); typePriority.Add((ItemType)12); typePriority.Add((ItemType)9); typePriority.Add((ItemType)23); typePriority.Add((ItemType)2); typePriority.Add((ItemType)19); typePriority.Add((ItemType)1); typePriority.Add((ItemType)10); typePriority.Add((ItemType)16); typePriority.Add((ItemType)13); typePriority.Add((ItemType)15); typePriority.Add((ItemType)21); typePriority.Add((ItemType)0); } public static int GetCorpseRunCarryBonus() { return Instance.config_corpseRunBuffValue.Value; } [HarmonyPatch(typeof(Inventory), "MoveAll")] [HarmonyPriority(500)] private static bool Prefix(ref Inventory __instance, ref Inventory fromInventory) { //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_023a: Unknown result type (might be due to invalid IL or missing references) //IL_023f: Unknown result type (might be due to invalid IL or missing references) //IL_0244: Unknown result type (might be due to invalid IL or missing references) if (((Humanoid)Player.m_localPlayer).m_inventory != __instance || !fromInventory.m_name.StartsWith("Grave")) { return true; } if ((Object)(object)InventoryGui.instance.m_currentContainer != (Object)null && InventoryGui.instance.m_currentContainer.m_inventory == fromInventory) { Logger.LogMessage((object)"Takeall while container is open."); return true; } float num = GetPlayerMaxCarryWithoutCorpseRunBonus() + (float)GetCorpseRunCarryBonus(); Logger.LogMessage((object)$"takeall from tombstone. Current player max carry: {num}"); List<ItemData> list = new List<ItemData>(fromInventory.GetAllItems()); List<ItemData> list2 = new List<ItemData>(); foreach (ItemData item in list) { list2.Add(item); } List<ItemData> list3 = new List<ItemData>(); foreach (ItemData item2 in list2.ToList()) { if (item2.m_gridPos.y == 0) { list3.Add(item2); list2.Remove(item2); } } foreach (ItemType item3 in Instance.typePriority) { foreach (ItemData item4 in list2.ToList()) { if (item4.m_shared.m_itemType == item3) { list3.Add(item4); list2.Remove(item4); } } } foreach (ItemData item5 in list2.ToList()) { list3.Add(item5); } Inventory inventory = ((Humanoid)Player.m_localPlayer).m_inventory; float num2 = inventory.GetTotalWeight(); foreach (ItemData item6 in list3) { if (num2 + item6.GetWeight(-1) > num) { if (item6.m_stack <= 1) { continue; } int num3 = (int)((num - num2) / item6.GetNonStackedWeight()); ItemData val = item6.Clone(); val.m_stack = num3; val.m_gridPos = new Vector2i(item6.m_gridPos); if (num3 > 0) { if (!AddItemCorrectLocation(inventory, val)) { return ExitMoveAll(__instance, fromInventory); } num2 += val.GetWeight(-1); item6.m_stack -= num3; } } else { if (!AddItemCorrectLocation(inventory, item6)) { return ExitMoveAll(__instance, fromInventory); } fromInventory.RemoveItem(item6); num2 += item6.GetWeight(-1); } } return ExitMoveAll(__instance, fromInventory); } public static float GetPlayerMaxCarryWithoutCorpseRunBonus() { Player localPlayer = Player.m_localPlayer; float num = localPlayer.GetMaxCarryWeight(); bool flag = false; foreach (StatusEffect statusEffect in ((Character)localPlayer).m_seman.m_statusEffects) { if (((Object)statusEffect).name == "TombstoneDriveByCorpseRun") { flag = true; break; } } if (flag) { num -= (float)Instance.config_corpseRunBuffValue.Value; } return num; } public static bool AddItemCorrectLocation(Inventory inv, ItemData item) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) if (inv.AddItem(item, item.m_gridPos)) { return true; } return inv.AddItem(item); } public static bool ExitMoveAll(Inventory playerInv, Inventory tombStoneInv) { playerInv.Changed(); tombStoneInv.Changed(); if (tombStoneInv.m_inventory.Count != 0 && (Object)(object)currentTombStone != (Object)null) { currentTombStone.m_localOpened = true; currentTombStone.m_container.Interact((Humanoid)(object)Player.m_localPlayer, false, false); } currentTombStone = null; return false; } } } namespace TombstoneDriveBy.Properties { [GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [DebuggerNonUserCode] [CompilerGenerated] internal class Resources { private static ResourceManager resourceMan; private static CultureInfo resourceCulture; [EditorBrowsable(EditorBrowsableState.Advanced)] internal static ResourceManager ResourceManager { get { if (resourceMan == null) { resourceMan = new ResourceManager("TombstoneDriveBy.Properties.Resources", typeof(Resources).Assembly); } return resourceMan; } } [EditorBrowsable(EditorBrowsableState.Advanced)] internal static CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } internal Resources() { } } }