using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Core.Logging.Interpolation;
using BepInEx.Logging;
using BepInEx.Unity.IL2CPP;
using HarmonyLib;
using SandSailorStudio.Inventory;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("blacks7ar")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.3")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("DurabilityMultiplier")]
[assembly: AssemblyTitle("DurabilityMultiplier")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.3.0")]
[module: UnverifiableCode]
namespace DurabilityMultiplier;
[BepInPlugin("blacks7ar.DurabilityMultiplier", "DurabilityMultiplier", "1.0.3")]
public class Plugin : BasePlugin
{
[HarmonyPatch]
private static class Patches
{
private static readonly HashSet<string> ProcessedItems = new HashSet<string>();
[HarmonyPrefix]
[HarmonyPatch(typeof(ItemInfo), "Configure")]
private static void Configure_Prefix(ref ItemInfo __instance)
{
//IL_01d8: Unknown result type (might be due to invalid IL or missing references)
//IL_01df: Expected O, but got Unknown
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Expected O, but got Unknown
//IL_017c: Unknown result type (might be due to invalid IL or missing references)
//IL_0183: Expected O, but got Unknown
bool flag = default(bool);
try
{
if ((Object)(object)__instance == (Object)null || __instance._durabAttrData == null)
{
return;
}
ManualLogSource dMLogger = DMLogger;
BepInExDebugLogInterpolatedStringHandler val = new BepInExDebugLogInterpolatedStringHandler(11, 2, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>(__instance.localizedName);
((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" category: ");
((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>(__instance.category.localizedName);
}
dMLogger.LogDebug(val);
string name = __instance.Name;
if (ProcessedItems.Contains(name))
{
return;
}
ItemCategoryInfo category = __instance.category;
if (!string.IsNullOrEmpty((category != null) ? category.Name : null))
{
float num = 1f;
if (IsAmmos(__instance))
{
num = _ammosDurabilityMultiplier.Value;
}
if (IsArmors(__instance))
{
num = _armorsDurabilityMultiplier.Value;
}
if (IsFoods(__instance))
{
num = _foodsDurabilityMultiplier.Value;
}
if (IsJunks(__instance))
{
num = _junksDurabilityMultiplier.Value;
}
if (IsMaterials(__instance))
{
num = _materialsDurabilityMultiplier.Value;
}
if (IsMisc(__instance))
{
num = _miscDurabilityMultiplier.Value;
}
if (IsSeeds(__instance))
{
num = _seedsDurabilityMultiplier.Value;
}
if (IsWeaponsAndTools(__instance))
{
num = _weaponsToolsDurabilityMultiplier.Value;
}
if (IsShields(__instance))
{
num = _shieldsDurabilityMultiplier.Value;
}
float value = __instance._durabAttrData.value;
float num2 = value * num;
__instance._durabAttrData.value = num2;
ManualLogSource dMLogger2 = DMLogger;
val = new BepInExDebugLogInterpolatedStringHandler(16, 3, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>(name);
((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" durability ");
((BepInExLogInterpolatedStringHandler)val).AppendFormatted<float>(value);
((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" -> ");
((BepInExLogInterpolatedStringHandler)val).AppendFormatted<float>(num2);
}
dMLogger2.LogDebug(val);
ProcessedItems.Add(name);
}
}
catch (Exception ex)
{
ManualLogSource dMLogger3 = DMLogger;
BepInExErrorLogInterpolatedStringHandler val2 = new BepInExErrorLogInterpolatedStringHandler(58, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("An error occured while configuring Durability Multiplier: ");
((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<Exception>(ex);
}
dMLogger3.LogError(val2);
}
}
}
private const string modGUID = "blacks7ar.DurabilityMultiplier";
public const string modName = "DurabilityMultiplier";
public const string modAuthor = "blacks7ar";
public const string modVersion = "1.0.3";
private static ManualLogSource DMLogger;
private static ConfigEntry<float> _ammosDurabilityMultiplier;
private static ConfigEntry<float> _armorsDurabilityMultiplier;
private static ConfigEntry<float> _foodsDurabilityMultiplier;
private static ConfigEntry<float> _junksDurabilityMultiplier;
private static ConfigEntry<float> _materialsDurabilityMultiplier;
private static ConfigEntry<float> _miscDurabilityMultiplier;
private static ConfigEntry<float> _seedsDurabilityMultiplier;
private static ConfigEntry<float> _weaponsToolsDurabilityMultiplier;
private static ConfigEntry<float> _shieldsDurabilityMultiplier;
public override void Load()
{
//IL_0163: Unknown result type (might be due to invalid IL or missing references)
DMLogger = ((BasePlugin)this).Log;
_ammosDurabilityMultiplier = ((BasePlugin)this).Config.Bind<float>("General", "Ammos Durability Multiplier", 3f, "Multiplies ammos max durability. (i.e Arrows or Baits");
_armorsDurabilityMultiplier = ((BasePlugin)this).Config.Bind<float>("General", "Armors Durability Multiplier", 2f, "Multiplies armors max durability");
_foodsDurabilityMultiplier = ((BasePlugin)this).Config.Bind<float>("General", "Foods Durability Multiplier", 2f, "Multiplies foods max durability.");
_junksDurabilityMultiplier = ((BasePlugin)this).Config.Bind<float>("General", "Junk Item Durability Multiplier", 2f, "Multiplies junk items max durability. (i.e spoiled food)");
_materialsDurabilityMultiplier = ((BasePlugin)this).Config.Bind<float>("General", "Materials Durability Multiplier", 2f, "Multiplies materials max durability. (i.e leathers, sticks etc.)");
_miscDurabilityMultiplier = ((BasePlugin)this).Config.Bind<float>("General", "Misc Items Durability Multiplier", 2f, "Multiplies misc items max durability. (i.e bone, crawler sack etc.)");
_seedsDurabilityMultiplier = ((BasePlugin)this).Config.Bind<float>("General", "Seeds Durability Multiplier", 2f, "Multiplies seeds max durability");
_weaponsToolsDurabilityMultiplier = ((BasePlugin)this).Config.Bind<float>("General", "Tools And Weapon Durability Multiplier", 2f, "Multiplies tools and weapons max durability");
_shieldsDurabilityMultiplier = ((BasePlugin)this).Config.Bind<float>("General", "Shields Durability Multiplier", 2f, "Multiplies shields max durability");
DMLogger.LogInfo((object)"Mod loaded!");
new Harmony("blacks7ar.DurabilityMultiplier").PatchAll();
}
private static bool IsAmmos(ItemInfo item)
{
string localizedName = item.category.localizedName;
return localizedName == "Arrows" || localizedName == "Bait";
}
private static bool IsArmors(ItemInfo item)
{
string localizedName = item.category.localizedName;
int num;
switch (localizedName)
{
default:
num = ((!(localizedName == "Shoulders")) ? 1 : 0);
break;
case "Boots":
case "Cape":
case "Chest":
case "Gloves":
case "Helmets":
case "Pants":
num = 0;
break;
}
return num == 0;
}
private static bool IsFoods(ItemInfo item)
{
return item.category.localizedName == "Food";
}
private static bool IsJunks(ItemInfo item)
{
return item.category.localizedName == "Junk";
}
private static bool IsMaterials(ItemInfo item)
{
string localizedName = item.category.localizedName;
return localizedName == "Iron" || localizedName == "Materials" || localizedName == "Wood";
}
private static bool IsMisc(ItemInfo item)
{
return item.category.localizedName == "Misc";
}
private static bool IsSeeds(ItemInfo item)
{
return item.category.localizedName == "Seeds";
}
private static bool IsWeaponsAndTools(ItemInfo item)
{
string localizedName = item.category.localizedName;
int num;
switch (localizedName)
{
default:
num = ((!(localizedName == "Smilk Bags")) ? 1 : 0);
break;
case "WaterSkins":
case "Smilk Flasks":
case "Axes":
case "Draw Knives":
case "Fishing Rods":
case "Gadgets":
case "Hammers":
case "Hoes":
case "Knives":
case "Pickaxes":
case "Rakes":
case "Shovels":
case "Special Tools":
case "Road Makers":
case "Torches":
case "Bows":
case "OneHanded":
case "TwoHanded":
num = 0;
break;
}
return num == 0;
}
private static bool IsShields(ItemInfo item)
{
return item.category.localizedName == "Shields";
}
}