Please disclose if your mod was created primarily 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 Tawheim Modpack v1.11.0
DeathTweaks.dll
Decompiled 2 years agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using HarmonyLib; using TMPro; 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(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyVersion("1.0.0.0")] public class AedenthornUtils { public static bool IgnoreKeyPresses(bool extra = false) { int result; if (!extra) { if (!((Object)(object)ZNetScene.instance == (Object)null) && !((Object)(object)Player.m_localPlayer == (Object)null) && !Minimap.IsOpen() && !Console.IsVisible() && !TextInput.IsVisible() && !ZNet.instance.InPasswordDialog()) { Chat instance = Chat.instance; if (instance == null || !instance.HasFocus()) { result = (Menu.IsVisible() ? 1 : 0); goto IL_005f; } } result = 1; goto IL_005f; } int result2; if (!((Object)(object)ZNetScene.instance == (Object)null) && !((Object)(object)Player.m_localPlayer == (Object)null) && !Minimap.IsOpen() && !Console.IsVisible() && !TextInput.IsVisible() && !ZNet.instance.InPasswordDialog()) { Chat instance2 = Chat.instance; if ((instance2 == null || !instance2.HasFocus()) && !StoreGui.IsVisible() && !InventoryGui.IsVisible() && !Menu.IsVisible()) { TextViewer instance3 = TextViewer.instance; result2 = ((instance3 != null && instance3.IsVisible()) ? 1 : 0); goto IL_00d9; } } result2 = 1; goto IL_00d9; IL_005f: return (byte)result != 0; IL_00d9: return (byte)result2 != 0; } public static bool CheckKeyDown(string value) { try { return Input.GetKeyDown(value.ToLower()); } catch { return false; } } public static bool CheckKeyHeld(string value, bool req = true) { try { return Input.GetKey(value.ToLower()); } catch { return !req; } } } namespace DeathTweaks; [BepInPlugin("aedenthorn.DeathTweaks", "Death Tweaks", "1.3.0")] public class BepInExPlugin : BaseUnityPlugin { private class InventoryInfos { public List<ItemData> drop_list; public Inventory inventory; public InventoryInfos(Inventory i, List<ItemData> d) { drop_list = d; inventory = i; } } [HarmonyPatch(typeof(Player), "OnDeath")] [HarmonyPriority(800)] private static class OnDeath_Patch { private static bool Prefix(Player __instance, Inventory ___m_inventory, ref float ___m_timeSinceDeath, float ___m_hardDeathCooldown, ZNetView ___m_nview, List<Food> ___m_foods, Skills ___m_skills, SEMan ___m_seman, HitData ___m_lastHit) { //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Expected I4, but got Unknown //IL_0295: Unknown result type (might be due to invalid IL or missing references) //IL_08c1: Unknown result type (might be due to invalid IL or missing references) //IL_08c6: Unknown result type (might be due to invalid IL or missing references) //IL_08d0: Unknown result type (might be due to invalid IL or missing references) //IL_08d5: Unknown result type (might be due to invalid IL or missing references) //IL_08da: Unknown result type (might be due to invalid IL or missing references) //IL_08e2: Unknown result type (might be due to invalid IL or missing references) //IL_08ea: Unknown result type (might be due to invalid IL or missing references) //IL_0bc9: Unknown result type (might be due to invalid IL or missing references) //IL_0bce: Unknown result type (might be due to invalid IL or missing references) //IL_0bd8: Unknown result type (might be due to invalid IL or missing references) //IL_0bdd: Unknown result type (might be due to invalid IL or missing references) //IL_0be2: Unknown result type (might be due to invalid IL or missing references) //IL_0bec: Unknown result type (might be due to invalid IL or missing references) //IL_0bf1: Unknown result type (might be due to invalid IL or missing references) //IL_0bf6: Unknown result type (might be due to invalid IL or missing references) //IL_0c0e: Unknown result type (might be due to invalid IL or missing references) //IL_0c13: Unknown result type (might be due to invalid IL or missing references) //IL_0c18: Unknown result type (might be due to invalid IL or missing references) //IL_0c1a: Unknown result type (might be due to invalid IL or missing references) //IL_0a10: Unknown result type (might be due to invalid IL or missing references) //IL_0a15: Unknown result type (might be due to invalid IL or missing references) //IL_0a28: Unknown result type (might be due to invalid IL or missing references) //IL_0a34: Unknown result type (might be due to invalid IL or missing references) //IL_0a63: Unknown result type (might be due to invalid IL or missing references) //IL_0afe: Unknown result type (might be due to invalid IL or missing references) //IL_0d18: Unknown result type (might be due to invalid IL or missing references) //IL_0d73: Unknown result type (might be due to invalid IL or missing references) //IL_0d78: Unknown result type (might be due to invalid IL or missing references) //IL_0561: Unknown result type (might be due to invalid IL or missing references) //IL_05d2: Unknown result type (might be due to invalid IL or missing references) //IL_05d7: Invalid comparison between O and Unknown //IL_06ce: Unknown result type (might be due to invalid IL or missing references) //IL_0734: Unknown result type (might be due to invalid IL or missing references) //IL_0784: Unknown result type (might be due to invalid IL or missing references) if (!modEnabled.Value) { return true; } ___m_nview.GetZDO().Set("dead", true); ___m_nview.InvokeRPC(ZNetView.Everybody, "OnDeath", new object[0]); Game.instance.IncrementPlayerStat((PlayerStatType)0, 1f); HitType hitType = ___m_lastHit.m_hitType; HitType val = hitType; switch ((int)val) { case 0: Game.instance.IncrementPlayerStat((PlayerStatType)55, 1f); break; case 1: Game.instance.IncrementPlayerStat((PlayerStatType)56, 1f); break; case 2: Game.instance.IncrementPlayerStat((PlayerStatType)57, 1f); break; case 3: Game.instance.IncrementPlayerStat((PlayerStatType)58, 1f); break; case 4: Game.instance.IncrementPlayerStat((PlayerStatType)59, 1f); break; case 5: Game.instance.IncrementPlayerStat((PlayerStatType)60, 1f); break; case 6: Game.instance.IncrementPlayerStat((PlayerStatType)61, 1f); break; case 7: Game.instance.IncrementPlayerStat((PlayerStatType)62, 1f); break; case 8: Game.instance.IncrementPlayerStat((PlayerStatType)64, 1f); break; case 9: Game.instance.IncrementPlayerStat((PlayerStatType)63, 1f); break; case 10: Game.instance.IncrementPlayerStat((PlayerStatType)65, 1f); break; case 11: Game.instance.IncrementPlayerStat((PlayerStatType)66, 1f); break; case 12: Game.instance.IncrementPlayerStat((PlayerStatType)67, 1f); break; case 13: Game.instance.IncrementPlayerStat((PlayerStatType)68, 1f); break; case 14: Game.instance.IncrementPlayerStat((PlayerStatType)69, 1f); break; case 15: Game.instance.IncrementPlayerStat((PlayerStatType)70, 1f); break; case 16: Game.instance.IncrementPlayerStat((PlayerStatType)71, 1f); break; case 17: Game.instance.IncrementPlayerStat((PlayerStatType)72, 1f); break; case 18: Game.instance.IncrementPlayerStat((PlayerStatType)73, 1f); break; default: ZLog.LogWarning((object)("Not implemented death type " + ((object)(HitType)(ref ___m_lastHit.m_hitType)).ToString())); break; } Game.instance.GetPlayerProfile().SetDeathPoint(((Component)__instance).transform.position); if (createDeathEffects.Value) { Traverse.Create((object)__instance).Method("CreateDeathEffects", Array.Empty<object>()).GetValue(); } List<InventoryInfos> list = new List<InventoryInfos>(); if (!keepAllItems.Value) { if (quickSlotsAssembly != null) { object obj = quickSlotsAssembly.GetType("EquipmentAndQuickSlots.InventoryExtensions").GetMethod("Extended", BindingFlags.Static | BindingFlags.Public).Invoke(null, new object[1] { ___m_inventory }); foreach (Inventory item in (List<Inventory>)quickSlotsAssembly.GetType("EquipmentAndQuickSlots.ExtendedInventory").GetField("_inventories", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(obj)) { list.Add(new InventoryInfos(item, new List<ItemData>())); } } else { list.Add(new InventoryInfos(___m_inventory, new List<ItemData>())); } string[] source = (string.IsNullOrEmpty(keepItemTypes.Value) ? new string[0] : keepItemTypes.Value.Split(new char[1] { ',' })); string[] source2 = (string.IsNullOrEmpty(keepItemNames.Value) ? new string[0] : keepItemNames.Value.Split(new char[1] { ',' })); string[] source3 = (string.IsNullOrEmpty(destroyItemTypes.Value) ? new string[0] : destroyItemTypes.Value.Split(new char[1] { ',' })); string[] source4 = (string.IsNullOrEmpty(destroyItemNames.Value) ? new string[0] : destroyItemNames.Value.Split(new char[1] { ',' })); string[] source5 = (string.IsNullOrEmpty(dropItemTypes.Value) ? new string[0] : dropItemTypes.Value.Split(new char[1] { ',' })); string[] source6 = (string.IsNullOrEmpty(dropItemNames.Value) ? new string[0] : dropItemNames.Value.Split(new char[1] { ',' })); for (int i = 0; i < list.Count; i++) { Inventory inventory = list[i].inventory; List<ItemData> drop_list = list[i].drop_list; Dbgl($" inventory {i}"); List<ItemData> allItems = inventory.GetAllItems(); for (int num = allItems.Count - 1; num >= 0; num--) { ItemData val2 = allItems[num]; Dbgl($" Item Name: {((Object)val2.m_dropPrefab).name} Cat: {val2.m_shared.m_itemType}"); } if (quickSlotsAssembly != null && keepQuickSlotItems.Value && (object)inventory == (object)(Inventory)quickSlotsAssembly.GetType("EquipmentAndQuickSlots.PlayerExtensions").GetMethod("GetQuickSlotInventory", BindingFlags.Static | BindingFlags.Public).Invoke(null, new object[1] { __instance })) { Dbgl("Skipping quick slot inventory"); continue; } List<ItemData> value = Traverse.Create((object)inventory).Field("m_inventory").GetValue<List<ItemData>>(); if (destroyAllItems.Value) { value.Clear(); } else { for (int num2 = value.Count - 1; num2 >= 0; num2--) { ItemData val3 = value[num2]; if ((!keepEquippedItems.Value || !val3.m_equipped) && (!keepHotbarItems.Value || !(inventory.GetName() == ___m_inventory.GetName()) || val3.m_gridPos.y != 0) && !val3.m_shared.m_questItem) { if (source3.Contains<string>(Enum.GetName(typeof(ItemType), val3.m_shared.m_itemType))) { value.RemoveAt(num2); } else if (source4.Contains(((Object)val3.m_dropPrefab).name)) { value.RemoveAt(num2); } else if (!source.Contains<string>(Enum.GetName(typeof(ItemType), val3.m_shared.m_itemType)) && !source2.Contains(((Object)val3.m_dropPrefab).name)) { if (source5.Contains<string>(Enum.GetName(typeof(ItemType), val3.m_shared.m_itemType))) { drop_list.Add(val3); value.RemoveAt(num2); } else if (source6.Contains(((Object)val3.m_dropPrefab).name)) { drop_list.Add(val3); value.RemoveAt(num2); } else if (!val3.m_shared.m_teleportable || !keepTeleportableItems.Value) { drop_list.Add(val3); value.RemoveAt(num2); } } } } } Traverse.Create((object)inventory).Method("Changed", Array.Empty<object>()).GetValue(); } } for (int j = 0; j < list.Count; j++) { Inventory inventory2 = list[j].inventory; List<ItemData> drop_list2 = list[j].drop_list; if (useTombStone.Value && drop_list2.Any()) { Dbgl(" dropItems.Any"); Vector3 val4 = ((Character)__instance).GetCenterPoint() + Vector3.left * (float)(j * 2); GameObject val5 = Object.Instantiate<GameObject>(__instance.m_tombstone, val4, ((Component)__instance).transform.rotation); val5.GetComponent<Container>().GetInventory().RemoveAll(); int value2 = Traverse.Create((object)inventory2).Field("m_width").GetValue<int>(); int value3 = Traverse.Create((object)inventory2).Field("m_height").GetValue<int>(); Traverse.Create((object)val5.GetComponent<Container>().GetInventory()).Field("m_width").SetValue((object)value2); Traverse.Create((object)val5.GetComponent<Container>().GetInventory()).Field("m_height").SetValue((object)value3); TombStone component = val5.GetComponent<TombStone>(); PlayerProfile playerProfile = Game.instance.GetPlayerProfile(); switch (j) { case 0: component.Setup(playerProfile.GetName(), playerProfile.GetPlayerID()); break; case 1: component.Setup(playerProfile.GetName() + "- Quickslots", playerProfile.GetPlayerID()); foreach (ItemData item2 in drop_list2) { Vector2i gridPos = item2.m_gridPos; item2.m_customData["eaqs-qs"] = $"{gridPos.x},{gridPos.y}"; Dbgl($" Quickslot Item Name: {((Object)item2.m_dropPrefab).name} Cat: {item2.m_shared.m_itemType}"); } break; case 2: component.Setup(playerProfile.GetName() + "- Eqipment", playerProfile.GetPlayerID()); foreach (ItemData item3 in drop_list2) { item3.m_customData["eaqs-e"] = "1"; Dbgl($" Eqipment Item Name: {((Object)item3.m_dropPrefab).name} Cat: {item3.m_shared.m_itemType}"); } break; } Traverse.Create((object)val5.GetComponent<Container>().GetInventory()).Field("m_inventory").SetValue((object)drop_list2); Traverse.Create((object)val5.GetComponent<Container>().GetInventory()).Method("Changed", Array.Empty<object>()).GetValue(); continue; } Dbgl(" !! dropItems.Any"); foreach (ItemData item4 in drop_list2) { Dbgl(" Item : " + ((Object)item4.m_dropPrefab).name); Vector3 val6 = ((Component)__instance).transform.position + Vector3.up * 0.5f + Random.insideUnitSphere * 0.3f; Quaternion val7 = Quaternion.Euler(0f, (float)Random.Range(0, 360), 0f); ItemDrop.DropItem(item4, 0, val6, val7); } } if (!keepFoodLevels.Value) { ___m_foods.Clear(); } bool flag = noSkillProtection.Value || ___m_timeSinceDeath > ___m_hardDeathCooldown; if (flag && reduceSkills.Value) { ___m_skills.LowerAllSkills(skillReduceFactor.Value); } ___m_seman.RemoveAllStatusEffects(false); Game.instance.RequestRespawn(10f, false); ___m_timeSinceDeath = 0f; if (!flag) { ((Character)__instance).Message((MessageType)1, "$msg_softdeath", 0, (Sprite)null); } ((Character)__instance).Message((MessageType)2, "$msg_youdied", 0, (Sprite)null); __instance.ShowTutorial("death", false); Minimap.instance.AddPin(((Component)__instance).transform.position, (PinType)4, $"$hud_mapday {EnvMan.instance.GetDay(ZNet.instance.GetTimeSeconds())}", true, false, 0L, ""); if (((Character)__instance).m_onDeath != null) { ((Character)__instance).m_onDeath(); } Biome currentBiome = __instance.GetCurrentBiome(); string text = "biome:" + ((object)(Biome)(ref currentBiome)).ToString(); Gogan.LogEvent("Game", "Death", text, 0L); return false; } } [HarmonyPatch(typeof(Player), "HardDeath")] private static class HardDeath_Patch { private static bool Prefix(ref bool __result) { if (!modEnabled.Value || !noSkillProtection.Value) { return true; } __result = true; return false; } } [HarmonyPatch(typeof(Game), "FindSpawnPoint")] private static class FindSpawnPoint_Patch { private static bool Prefix(ref Vector3 point, ref bool usedLogoutPoint, bool ___m_firstSpawn, ref bool __result) { //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0137: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) if (!modEnabled.Value || ___m_firstSpawn) { return true; } if (spawnAtStart.Value) { usedLogoutPoint = false; Vector3 val = default(Vector3); if (ZoneSystem.instance.GetLocationIcon(Game.instance.m_StartLocation, ref val)) { point = val + Vector3.up * 2f; ZNet.instance.SetReferencePosition(point); __result = ZNetScene.instance.IsAreaReady(point); if (__result) { Dbgl($"respawning at start: {point}"); } } else { Dbgl("start point not found"); ZNet.instance.SetReferencePosition(Vector3.zero); point = Vector3.zero; __result = false; } return false; } if (useFixedSpawnCoordinates.Value) { usedLogoutPoint = false; point = fixedSpawnCoordinates.Value; ZNet.instance.SetReferencePosition(point); __result = ZNetScene.instance.IsAreaReady(point); if (__result) { Dbgl($"respawning at custom point {point}"); } return false; } return true; } } [HarmonyPatch(typeof(Skills), "OnDeath")] private static class Skills_OnDeath_Patch { private static bool Prefix() { if (!modEnabled.Value) { return true; } return reduceSkills.Value; } } [HarmonyPatch(typeof(Terminal), "InputText")] private static class InputText_Patch { private static bool Prefix(Terminal __instance) { if (!modEnabled.Value) { return true; } string text = ((TMP_InputField)__instance.m_input).text; if (text.ToLower().Equals(typeof(BepInExPlugin).Namespace.ToLower() + " reset")) { ((BaseUnityPlugin)context).Config.Reload(); ((BaseUnityPlugin)context).Config.Save(); __instance.AddString(text); __instance.AddString(((BaseUnityPlugin)context).Info.Metadata.Name + " config reloaded"); return false; } return true; } } public static ConfigEntry<bool> modEnabled; public static ConfigEntry<bool> isDebug; public static ConfigEntry<int> nexusID; public static ConfigEntry<bool> keepEquippedItems; public static ConfigEntry<bool> keepHotbarItems; public static ConfigEntry<bool> keepAllItems; public static ConfigEntry<bool> destroyAllItems; public static ConfigEntry<bool> useTombStone; public static ConfigEntry<bool> keepFoodLevels; public static ConfigEntry<bool> keepQuickSlotItems; public static ConfigEntry<bool> keepTeleportableItems; public static ConfigEntry<bool> createDeathEffects; public static ConfigEntry<bool> reduceSkills; public static ConfigEntry<bool> noSkillProtection; public static ConfigEntry<bool> useFixedSpawnCoordinates; public static ConfigEntry<bool> spawnAtStart; public static ConfigEntry<Vector3> fixedSpawnCoordinates; public static ConfigEntry<float> skillReduceFactor; public static ConfigEntry<string> keepItemTypes; public static ConfigEntry<string> dropItemTypes; public static ConfigEntry<string> destroyItemTypes; public static ConfigEntry<string> keepItemNames; public static ConfigEntry<string> dropItemNames; public static ConfigEntry<string> destroyItemNames; private static BepInExPlugin context; private static List<string> typeEnums = new List<string>(); private static Assembly quickSlotsAssembly; public static void Dbgl(string str = "", bool pref = true) { if (isDebug.Value) { Debug.Log((object)((pref ? (typeof(BepInExPlugin).Namespace + " ") : "") + str)); } } private void Awake() { //IL_0351: Unknown result type (might be due to invalid IL or missing references) foreach (int value in Enum.GetValues(typeof(ItemType))) { typeEnums.Add(Enum.GetName(typeof(ItemType), value)); } context = this; modEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Enabled", true, "Enable this mod"); isDebug = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "IsDebug", true, "Enable debug logs"); nexusID = ((BaseUnityPlugin)this).Config.Bind<int>("General", "NexusID", 1068, "Nexus mod ID for updates"); keepItemTypes = ((BaseUnityPlugin)this).Config.Bind<string>("ItemLists", "KeepItemTypes", "", "List of items to keep (comma-separated). Leave empty if using DropItemTypes. Valid types: " + string.Join(",", typeEnums)); dropItemTypes = ((BaseUnityPlugin)this).Config.Bind<string>("ItemLists", "DropItemTypes", "", "List of items to drop (comma-separated). Leave empty if using KeepItemTypes. Valid types: " + string.Join(",", typeEnums)); destroyItemTypes = ((BaseUnityPlugin)this).Config.Bind<string>("ItemLists", "DestroyItemTypes", "", "List of items to destroy (comma-separated). Overrides other lists. Valid types: " + string.Join(",", typeEnums)); keepItemNames = ((BaseUnityPlugin)this).Config.Bind<string>("ItemLists", "KeepItems", "", "List of items to keep (comma-separated). Use Item names, for example: Iron,IronScrap,BronzeOre"); dropItemNames = ((BaseUnityPlugin)this).Config.Bind<string>("ItemLists", "DropItems", "", "List of items to drop (comma-separated). Use Item names, for example: Iron,IronScrap,BronzeOre"); destroyItemNames = ((BaseUnityPlugin)this).Config.Bind<string>("ItemLists", "DestroyItems", "", "List of items to destroy (comma-separated). Overrides other lists. Use Item names, for example: Iron,IronScrap,BronzeOre"); keepAllItems = ((BaseUnityPlugin)this).Config.Bind<bool>("Toggles", "KeepAllItems", false, "Overrides all other item options if true."); destroyAllItems = ((BaseUnityPlugin)this).Config.Bind<bool>("Toggles", "DestroyAllItems", false, "Overrides all other item options except KeepAllItems if true."); keepEquippedItems = ((BaseUnityPlugin)this).Config.Bind<bool>("Toggles", "KeepEquippedItems", false, "Overrides item lists if true."); keepTeleportableItems = ((BaseUnityPlugin)this).Config.Bind<bool>("Toggles", "KeepTeleportableItems", false, "Doesn't override item lists."); keepHotbarItems = ((BaseUnityPlugin)this).Config.Bind<bool>("Toggles", "KeepHotbarItems", false, "Overrides item lists if true."); useTombStone = ((BaseUnityPlugin)this).Config.Bind<bool>("Toggles", "UseTombStone", true, "Use tombstone (if false, drops items on ground)."); createDeathEffects = ((BaseUnityPlugin)this).Config.Bind<bool>("Toggles", "CreateDeathEffects", true, "Create death effects."); keepFoodLevels = ((BaseUnityPlugin)this).Config.Bind<bool>("Toggles", "KeepFoodLevels", false, "Keep food levels."); keepQuickSlotItems = ((BaseUnityPlugin)this).Config.Bind<bool>("Toggles", "KeepQuickSlotItems", false, "Keep QuickSlot items."); useFixedSpawnCoordinates = ((BaseUnityPlugin)this).Config.Bind<bool>("Spawn", "UseFixedSpawnCoordinates", false, "Use fixed spawn coordinates."); spawnAtStart = ((BaseUnityPlugin)this).Config.Bind<bool>("Spawn", "SpawnAtStart", false, "Respawn at start location."); fixedSpawnCoordinates = ((BaseUnityPlugin)this).Config.Bind<Vector3>("Spawn", "FixedSpawnCoordinates", Vector3.zero, "Fixed spawn coordinates."); noSkillProtection = ((BaseUnityPlugin)this).Config.Bind<bool>("Skills", "NoSkillProtection", false, "Prevents skill protection after death."); reduceSkills = ((BaseUnityPlugin)this).Config.Bind<bool>("Skills", "ReduceSkills", true, "Reduce skills."); skillReduceFactor = ((BaseUnityPlugin)this).Config.Bind<float>("Skills", "SkillReduceFactor", 0.25f, "Reduce skills by this fraction."); Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), (string)null); } private void Start() { if (Chainloader.PluginInfos.ContainsKey("randyknapp.mods.equipmentandquickslots")) { quickSlotsAssembly = ((object)Chainloader.PluginInfos["randyknapp.mods.equipmentandquickslots"].Instance).GetType().Assembly; } } }
DropMoreLoot.dll
Decompiled 2 years agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using DropMore; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("DropMoreLoot")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("TastyChickenLegs")] [assembly: AssemblyProduct("DropMoreLoot")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("6bfecd5b-47de-40f4-97e7-87b49249bef7")] [assembly: AssemblyFileVersion("1.1.1")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.1.1.0")] [module: UnverifiableCode] 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 DropMoreLoot.Patches { internal class GamePatches { [HarmonyPatch(typeof(ItemDrop), "Awake")] public static class ItemDrop_Awake_Patch { private static void Prefix(ref ItemDrop __instance) { if (__instance.m_itemData.m_shared.m_maxStackSize > 1 && DropMoreLootMain.itemStackMultiplier.Value >= 1 && DropMoreLootMain.enableStacking.Value) { int value = DropMoreLootMain.itemStackMultiplier.Value; int maxStackSize = __instance.m_itemData.m_shared.m_maxStackSize * value; __instance.m_itemData.m_shared.m_maxStackSize = maxStackSize; } if (DropMoreLootMain.useWeightReduction.Value) { __instance.m_itemData.m_shared.m_weight = __instance.m_itemData.m_shared.m_weight * Mathf.Clamp01(DropMoreLootMain.itemWeightReduction.Value); } if (!Object.op_Implicit((Object)(object)((Component)__instance).gameObject.GetComponent<Floating>()) && DropMoreLootMain.itemsFloatInWater.Value) { ((Component)__instance).gameObject.AddComponent<Floating>(); ((Component)__instance).gameObject.GetComponent<Floating>().m_waterLevelOffset = 0.5f; } } } } internal class PlayerPatches { [HarmonyPatch(typeof(Player), "Awake")] public static class Player_Awake_Patch { private static void Postfix(ref Player __instance) { if (DropMoreLootMain.enablePickUpRange.Value) { float autoPickupRange = Convert.ToSingle(DropMoreLootMain.pickUpRange.Value); __instance.m_autoPickupRange = autoPickupRange; } } } } } namespace ModDrops { public class DropPatches { [HarmonyPatch(typeof(DropTable), "GetDropList", new Type[] { })] public static class MultiplyResources_Patch { [HarmonyPatch(typeof(CharacterDrop), "GenerateDropList")] public static class MultiplyLoot_Patch { [HarmonyPrefix] private static bool MultiplyLoot(CharacterDrop __instance, ref List<KeyValuePair<GameObject, int>> __result) { List<KeyValuePair<GameObject, int>> list = new List<KeyValuePair<GameObject, int>>(); int num = ((!Object.op_Implicit((Object)(object)__instance.m_character)) ? 1 : Mathf.Max(1, (int)Mathf.Pow(2f, (float)(__instance.m_character.GetLevel() - 1)))); foreach (Drop drop in __instance.m_drops) { if ((Object)(object)drop.m_prefab == (Object)null) { continue; } float num2 = drop.m_chance; if (drop.m_levelMultiplier) { num2 *= (float)num; } if (!(Random.value <= num2)) { continue; } int num3 = Random.Range(drop.m_amountMin, drop.m_amountMax); if (drop.m_levelMultiplier) { num3 *= num; } if (drop.m_onePerPlayer) { num3 = ZNet.instance.GetNrOfPlayers(); } if (num3 <= 0) { continue; } if (DropMoreLootMain.enableWhitelist.Value) { if (!((Object)(object)drop.m_prefab != (Object)null)) { continue; } foreach (string item in DropMoreLootMain.whitelist) { if (((Object)drop.m_prefab).name.Equals(item)) { list.Add(new KeyValuePair<GameObject, int>(drop.m_prefab, num3 * DropMoreLootMain.lootMultiplier.Value - num3)); } } list.Add(new KeyValuePair<GameObject, int>(drop.m_prefab, num3)); } else { list.Add(new KeyValuePair<GameObject, int>(drop.m_prefab, num3 * DropMoreLootMain.lootMultiplier.Value)); } } __result = list; return false; } } [HarmonyPatch(typeof(Pickable), "RPC_Pick")] public static class Pickable_Patch { [HarmonyPrefix] private static bool MultiplyPickables(Pickable __instance) { if (!__instance.m_nview.IsOwner()) { return true; } if (__instance.m_picked) { return true; } int num = 0; if (DropMoreLootMain.pickupMultiplier.Value >= 2) { for (int i = 0; i < __instance.m_amount; i++) { if (DropMoreLootMain.enableWhitelist.Value) { if (!((Object)(object)__instance.m_itemPrefab != (Object)null)) { continue; } foreach (string item in DropMoreLootMain.whitelist) { if (((Object)__instance.m_itemPrefab).name.Equals(item)) { __instance.Drop(__instance.m_itemPrefab, num++, DropMoreLootMain.pickupMultiplier.Value - 1); } } } else { __instance.Drop(__instance.m_itemPrefab, num++, DropMoreLootMain.pickupMultiplier.Value - 1); } } } return true; } } [HarmonyPatch(typeof(PickableItem), "Drop")] public static class Getvaluable_Patch { [HarmonyPrefix] private static bool GetValuable(PickableItem __instance) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0030: 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_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) Vector3 val = ((Component)__instance).gameObject.transform.position + Vector3.up * 0.2f; GameObject obj = Object.Instantiate<GameObject>(((Component)__instance.m_itemPrefab).gameObject, val, ((Component)__instance).gameObject.transform.rotation); obj.GetComponent<Rigidbody>().velocity = Vector3.up * 4f; ItemDrop component = obj.GetComponent<ItemDrop>(); if (DropMoreLootMain.enableWhitelist.Value) { using List<string>.Enumerator enumerator = DropMoreLootMain.whitelist.GetEnumerator(); if (enumerator.MoveNext()) { string current = enumerator.Current; if (((Object)component.m_itemData.m_dropPrefab).name.Equals(current)) { component.m_itemData.m_stack = __instance.GetStackSize() * DropMoreLootMain.pickupMultiplier.Value; return false; } component.m_itemData.m_stack = __instance.GetStackSize(); return false; } } component.m_itemData.m_stack = __instance.GetStackSize() * DropMoreLootMain.pickupMultiplier.Value; return false; } } [HarmonyPatch(typeof(Fish), "RPC_Pickup")] private static class Rpgpickup_Patch { [HarmonyPrefix] private static bool FishStack(Fish __instance) { if (DropMoreLootMain.enableWhitelist.Value) { foreach (string item in DropMoreLootMain.whitelist) { if (((Object)__instance.m_pickupItem).name.Equals(item)) { __instance.m_pickupItemStackSize *= DropMoreLootMain.lootMultiplier.Value; } } return true; } __instance.m_pickupItemStackSize *= DropMoreLootMain.lootMultiplier.Value; return true; } } [HarmonyPrefix] private static bool MultiplyResources(DropTable __instance, ref List<GameObject> __result) { //IL_01b7: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01be: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_01de: Unknown result type (might be due to invalid IL or missing references) //IL_002e: 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) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_01f6: Unknown result type (might be due to invalid IL or missing references) //IL_0214: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) List<DropData> list = new List<DropData>(__instance.m_drops); int num; if (DropMoreLootMain.enableWhitelist.Value) { foreach (DropData drop in __instance.m_drops) { if (!((Object)(object)drop.m_item != (Object)null)) { continue; } foreach (string item in DropMoreLootMain.whitelist) { if (!((Object)drop.m_item).name.Equals(item)) { continue; } num = Random.Range(__instance.m_dropMin, __instance.m_dropMax + 1) * DropMoreLootMain.materialMultiplier.Value; List<GameObject> dropList = __instance.GetDropList(num); foreach (DropData item2 in list) { int num2 = Random.Range(item2.m_stackMin, item2.m_stackMax) * DropMoreLootMain.materialMultiplier.Value; if (((Object)item2.m_item).name.Equals("Honey") || ((Object)item2.m_item).name.Equals("QueenBee")) { for (int i = 0; i < num2; i++) { dropList.Add(item2.m_item); } } } __result = dropList; return false; } } return true; } num = Random.Range(__instance.m_dropMin, __instance.m_dropMax + 1) * DropMoreLootMain.materialMultiplier.Value; List<GameObject> dropList2 = __instance.GetDropList(num); foreach (DropData item3 in list) { int num3 = Random.Range(item3.m_stackMin, item3.m_stackMax) * DropMoreLootMain.materialMultiplier.Value; if (((Object)item3.m_item).name.Equals("Honey") || ((Object)item3.m_item).name.Equals("QueenBee")) { for (int j = 0; j < num3; j++) { dropList2.Add(item3.m_item); } } } __result = dropList2; return false; } } } } namespace DropMore { [BepInPlugin("TastyChickenLegs.DropMoreLoot", "DropMoreLoot", "1.1.1")] public class DropMoreLootMain : BaseUnityPlugin { public const string MODNAME = "DropMoreLoot"; public const string AUTHOR = "TastyChickenLegs"; public const string GUID = "TastyChickenLegs.DropMoreLoot"; public const string VERSION = "1.1.1"; public static ManualLogSource logger; internal Harmony harmony; internal Assembly assembly; public string modFolder; public static ConfigEntry<int> materialMultiplier = null; public static ConfigEntry<int> lootMultiplier = null; public static ConfigEntry<int> pickupMultiplier = null; public static ConfigEntry<bool> enableWhitelist = null; private static Assembly ass = typeof(DropMoreLootMain).Assembly; public static List<string> whitelist = null; public static string whitelistFile = null; public static ConfigEntry<int> pickUpRange = null; public static ConfigEntry<int> itemStackMultiplier = null; public static ConfigEntry<bool> itemsFloatInWater = null; public static ConfigEntry<bool> enableStacking = null; public static ConfigEntry<bool> enablePickUpRange = null; public static ConfigEntry<float> itemWeightReduction = null; public static ConfigEntry<bool> useWeightReduction; public static ConfigEntry<string> AutoPickupBlockList; public static ConfigEntry<string> IncludedCategories; internal static IEnumerable<ItemType> categories; private static string ConfigFileName = "TastyChickenLegs.DropMoreLoot.cfg"; private static string ConfigFileFullPath; public static readonly ManualLogSource TastyLogger; private void Awake() { //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Expected O, but got Unknown //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Expected O, but got Unknown //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Expected O, but got Unknown //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Expected O, but got Unknown //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_016a: Expected O, but got Unknown //IL_0248: Unknown result type (might be due to invalid IL or missing references) //IL_0252: Expected O, but got Unknown //IL_0287: Unknown result type (might be due to invalid IL or missing references) //IL_0291: Expected O, but got Unknown //IL_0316: Unknown result type (might be due to invalid IL or missing references) //IL_0320: Expected O, but got Unknown whitelistFile = Path.GetDirectoryName(ass.Location) + "\\whitelist.txt"; if (!File.Exists(whitelistFile)) { File.Create(whitelistFile).Dispose(); } materialMultiplier = ((BaseUnityPlugin)this).Config.Bind<int>("Loot", "Multiplier for resources", 3, new ConfigDescription("Material Multiplier", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 5), Array.Empty<object>())); lootMultiplier = ((BaseUnityPlugin)this).Config.Bind<int>("Loot", "Multiplier for monster drops", 3, new ConfigDescription(" Monster Drop Multiplier", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 5), Array.Empty<object>())); pickupMultiplier = ((BaseUnityPlugin)this).Config.Bind<int>("Loot", "Multiplier for pickable objects", 3, new ConfigDescription("Pickup Multiplier", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 5), Array.Empty<object>())); enableWhitelist = ((BaseUnityPlugin)this).Config.Bind<bool>("Whitelist", "Enable whitelist filter", false, "Whitelist"); enablePickUpRange = ((BaseUnityPlugin)this).Config.Bind<bool>("Pickup", "Enable Pickup Range", true, "Enable Pickup Range"); pickUpRange = ((BaseUnityPlugin)this).Config.Bind<int>("Pickup", "Pickup Range", 3, new ConfigDescription("Auto Pickup Distance from Player", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 10), Array.Empty<object>())); itemStackMultiplier = ((BaseUnityPlugin)this).Config.Bind<int>("Stacking", "Item Stack Multiplier", 3, new ConfigDescription("Item Stacking Multiplier", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 5), Array.Empty<object>())); itemsFloatInWater = ((BaseUnityPlugin)this).Config.Bind<bool>("Pickup", "Items Float in Water", true, "Items Always Float in Water"); enableStacking = ((BaseUnityPlugin)this).Config.Bind<bool>("Stacking", "Enable Stacking", true, "Use Stacking Feature"); whitelist = File.ReadAllLines(Path.GetDirectoryName(ass.Location) + "\\whitelist.txt").Distinct().ToList(); whitelistFile = Path.GetDirectoryName(ass.Location) + "\\whitelist.txt"; itemWeightReduction = ((BaseUnityPlugin)this).Config.Bind<float>("Loot", "percentofweight", 0.5f, new ConfigDescription("Item Weight Reduction Multiplier - Lower number means less weight per item", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), new object[2] { null, new ConfigurationManagerAttributes { ShowRangeAsPercent = true, DispName = "Weight Multiplyer" } })); useWeightReduction = ((BaseUnityPlugin)this).Config.Bind<bool>("Loot", "useWeightReduction", true, new ConfigDescription("Use the Weight Reduction Feature", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { DispName = "Ues Weight Reduction Settings" } })); AutoPickupBlockList = ((BaseUnityPlugin)this).Config.Bind<string>("General", "AutoPickupBlockList", string.Empty, (ConfigDescription)null); IncludedCategories = ((BaseUnityPlugin)this).Config.Bind<string>("General", "IncludedCategories", "Material;Trophie;Consumable;Torch;Tool", "Semicolon separated list of item types to include. Possible types are:None;Material;Consumable;OneHandedWeapon;Bow;Shield;Helmet;Chest;Ammo;Customization;Legs;Hands;Trophie;TwoHandedWeapon;Torch;Misc;Shoulder;Utility;Tool;Attach_Atgeir"); categories = BuildCategoryList(); assembly = Assembly.GetExecutingAssembly(); modFolder = Path.GetDirectoryName(assembly.Location); harmony = new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID); harmony.PatchAll(); TastyLogger.LogInfo((object)whitelist); SetupWatcher(); } private void SetupWatcher() { FileSystemWatcher fileSystemWatcher = new FileSystemWatcher(Paths.ConfigPath, ConfigFileName); fileSystemWatcher.Changed += ReadConfigValues; fileSystemWatcher.Created += ReadConfigValues; fileSystemWatcher.Renamed += ReadConfigValues; fileSystemWatcher.IncludeSubdirectories = true; fileSystemWatcher.SynchronizingObject = ThreadingHelper.SynchronizingObject; fileSystemWatcher.EnableRaisingEvents = true; } private void ReadConfigValues(object sender, FileSystemEventArgs e) { if (!File.Exists(ConfigFileFullPath)) { return; } try { TastyLogger.LogDebug((object)"ReadConfigValues called"); ((BaseUnityPlugin)this).Config.Reload(); } catch { TastyLogger.LogError((object)("There was an issue loading your " + ConfigFileName)); TastyLogger.LogError((object)"Please check your config entries for spelling and format!"); } } private void OnDestroy() { ((BaseUnityPlugin)this).Config.Save(); } private static IEnumerable<ItemType> BuildCategoryList() { string[] array = IncludedCategories.Value.Trim().Replace(" ", "").Split(new char[1] { ';' }); string[] array2 = array; for (int i = 0; i < array2.Length; i++) { if (Enum.TryParse<ItemType>(array2[i], out ItemType result)) { yield return result; } } } static DropMoreLootMain() { string configPath = Paths.ConfigPath; char directorySeparatorChar = Path.DirectorySeparatorChar; ConfigFileFullPath = configPath + directorySeparatorChar + ConfigFileName; TastyLogger = Logger.CreateLogSource("DropMoreLoot"); } } internal class AutoPickupPatchMain { [HarmonyPatch(typeof(ObjectDB), "Awake")] private class ObjectDB_Awake_Patch { private static void Postfix() { if (!((Object)(object)ObjectDB.instance != (Object)null)) { return; } string[] source = DropMoreLootMain.AutoPickupBlockList.Value.Split(new char[1] { ';' }); foreach (ItemDrop item in GetFilteredItemList()) { item.m_autoPickup = !source.Any((string v) => v == ((Object)item).name); } } } [HarmonyPatch(typeof(InventoryGui), "OnCloseTrophies")] private class OnCloseTrophies_Patch { private static void Postfix() { DropMoreLootMain.AutoPickupBlockList.Value = GeneralExtensions.Join<string>(from i in GetFilteredItemList() where !i.m_autoPickup select ((Object)i).name, (Func<string, string>)null, ";"); } } [HarmonyPatch(typeof(InventoryGui), "OnOpenTrophies")] private class OnOpenTrophies_Patch { private static void Postfix(ref float ___m_trophieListSpace, ref float ___m_trophieListBaseSize, ref RectTransform ___m_trophieListRoot, ref List<GameObject> ___m_trophyList, ref GameObject ___m_trophieElementPrefab, ref Scrollbar ___m_trophyListScroll) { foreach (GameObject ___m_trophy in ___m_trophyList) { Object.Destroy((Object)(object)___m_trophy); } ___m_trophyList.Clear(); ___m_trophyList.AddRange(CreateItemTiles(___m_trophieElementPrefab, ___m_trophieListRoot, ___m_trophieListSpace, ___m_trophieListBaseSize)); ___m_trophyListScroll.value = 1f; } private static IEnumerable<GameObject> CreateItemTiles(GameObject elementPrefab, RectTransform itemListRoot, float tileWidth, float tileBaseSize) { //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_01d3: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) List<GameObject> list = new List<GameObject>(); if ((Object)(object)Player.m_localPlayer == (Object)null) { return list; } float num = 0f; int num2 = 0; int num3 = 0; int num4 = 0; int num5 = -10; RectTransform rectTransform = default(RectTransform); foreach (ItemDrop component in from i in GetFilteredItemList() orderby i.m_itemData.m_shared.m_itemType select i) { GameObject val = Object.Instantiate<GameObject>(elementPrefab, (Transform)(object)itemListRoot); val.SetActive(true); ref RectTransform reference = ref rectTransform; Transform transform = val.transform; reference = (RectTransform)(object)((transform is RectTransform) ? transform : null); rectTransform.anchoredPosition = new Vector2((num2 == 0) ? ((float)num4) : ((float)num2 * tileWidth), (num3 == 0) ? ((float)num5) : ((float)num3 * (0f - tileWidth))); num = Mathf.Min(num, rectTransform.anchoredPosition.y - tileWidth); string text = Localization.instance.Localize(component.m_itemData.m_shared.m_name); if (text.EndsWith(" trophy")) { text = text.Remove(text.Length - 7); } ((Component)((Transform)rectTransform).Find("icon_bkg/icon")).GetComponent<Image>().sprite = component.m_itemData.GetIcon(); ((Component)((Transform)rectTransform).Find("name")).GetComponent<Text>().text = text; ((Component)((Transform)rectTransform).Find("description")).GetComponent<Text>().text = GetLootStateString(component); val.AddComponent<UIInputHandler>(); UIInputHandler component2 = val.GetComponent<UIInputHandler>(); component2.m_onLeftDown = (Action<UIInputHandler>)Delegate.Combine(component2.m_onLeftDown, (Action<UIInputHandler>)delegate { component.m_autoPickup = !component.m_autoPickup; ((Component)((Transform)rectTransform).Find("description")).GetComponent<Text>().text = GetLootStateString(component); }); list.Add(val); num2++; float num6 = (float)(num2 + 1) * tileWidth; Rect rect = itemListRoot.rect; if (num6 > ((Rect)(ref rect)).width) { num2 = 0; num3++; } } float num7 = Mathf.Max(tileBaseSize, 0f - num); itemListRoot.SetSizeWithCurrentAnchors((Axis)1, num7); return list; } private static string GetLootStateString(ItemDrop component) { string text = Localization.instance.Localize("yes"); string text2 = Localization.instance.Localize("no"); string text3 = (component.m_autoPickup ? text : text2); return "Auto pickup: " + text3; } } internal static IEnumerable<ItemDrop> GetFilteredItemList() { return from i in ObjectDB.instance.m_items select i.GetComponent<ItemDrop>() into i where DropMoreLootMain.categories.Contains(i.m_itemData.m_shared.m_itemType) where i.m_itemData.m_shared.m_icons.Length != 0 where IsKnownItem(i) select i; } private static bool IsKnownItem(ItemDrop i) { if ((Object)(object)Player.m_localPlayer == (Object)null) { return true; } if ((Traverse.Create((object)Player.m_localPlayer).Field("m_knownMaterial").GetValue() as HashSet<string>).Contains(i.m_itemData.m_shared.m_name)) { return true; } if ((Traverse.Create((object)Player.m_localPlayer).Field("m_trophies").GetValue() as HashSet<string>).Contains(i.m_itemData.m_shared.m_name)) { return true; } return false; } } internal sealed class ConfigurationManagerAttributes { public bool? ShowRangeAsPercent; public Action<ConfigEntryBase> CustomDrawer; public bool? Browsable; public string Category; public object DefaultValue; public bool? HideDefaultButton; public bool? HideSettingName; public string Description; public string DispName; public int? Order; public bool? ReadOnly; public bool? IsAdvanced; public Func<object, string> ObjToStr; public Func<string, object> StrToObj; } public class TastyUtils { public class ConnectionParams { public GameObject Connection; public Vector3 StationPos; } public static bool IgnoreKeyPresses(bool extra = false) { if (!extra) { if (!((Object)(object)ZNetScene.instance == (Object)null) && !((Object)(object)Player.m_localPlayer == (Object)null) && !Minimap.IsOpen() && !Console.IsVisible() && !TextInput.IsVisible() && !ZNet.instance.InPasswordDialog()) { Chat instance = Chat.instance; if (instance == null) { return false; } return instance.HasFocus(); } return true; } if (!((Object)(object)ZNetScene.instance == (Object)null) && !((Object)(object)Player.m_localPlayer == (Object)null) && !Minimap.IsOpen() && !Console.IsVisible() && !TextInput.IsVisible() && !ZNet.instance.InPasswordDialog()) { Chat instance2 = Chat.instance; if ((instance2 == null || !instance2.HasFocus()) && !StoreGui.IsVisible() && !InventoryGui.IsVisible() && !Menu.IsVisible()) { TextViewer instance3 = TextViewer.instance; if (instance3 == null) { return false; } return instance3.IsVisible(); } } return true; } } }