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.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("ScoutGemPetrifyConfig")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyDescription("Configurable scout gem petrify penalties for PEAK")]
[assembly: AssemblyFileVersion("1.1.0.0")]
[assembly: AssemblyInformationalVersion("1.1.0")]
[assembly: AssemblyProduct("ScoutGemPetrifyConfig")]
[assembly: AssemblyTitle("ScoutGemPetrifyConfig")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.1.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace PeakNoPetrifyMod
{
[BepInPlugin("com.modder.peak.scoutgempetrifyconfig", "ScoutGemPetrifyConfig", "1.1.0")]
[BepInProcess("PEAK.exe")]
public class NoPetrifyGemsPlugin : BaseUnityPlugin
{
public const string PLUGIN_GUID = "com.modder.peak.scoutgempetrifyconfig";
public const string PLUGIN_NAME = "ScoutGemPetrifyConfig";
public const string PLUGIN_VERSION = "1.1.0";
internal static ManualLogSource LogSource;
private Harmony _harmony;
public static ConfigEntry<bool> ModEnabled;
public static ConfigEntry<bool> UseCustomFlatValues;
public static ConfigEntry<float> GlobalPetrifyMultiplier;
public static ConfigEntry<float> AmbitionPetrifyCost;
public static ConfigEntry<float> GenerosityPetrifyCost;
public static ConfigEntry<float> TenacityPetrifyCost;
public static ConfigEntry<float> InitiativePetrifyCost;
public static ConfigEntry<float> StrangeGemPetrifyCost;
public static ConfigEntry<float> GenericGemPetrifyCost;
private void Awake()
{
//IL_0079: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: Expected O, but got Unknown
//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
//IL_00c0: Expected O, but got Unknown
//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
//IL_00fd: Expected O, but got Unknown
//IL_0130: Unknown result type (might be due to invalid IL or missing references)
//IL_013a: Expected O, but got Unknown
//IL_016d: Unknown result type (might be due to invalid IL or missing references)
//IL_0177: Expected O, but got Unknown
//IL_01aa: Unknown result type (might be due to invalid IL or missing references)
//IL_01b4: Expected O, but got Unknown
//IL_01e7: Unknown result type (might be due to invalid IL or missing references)
//IL_01f1: Expected O, but got Unknown
//IL_020b: Unknown result type (might be due to invalid IL or missing references)
//IL_0215: Expected O, but got Unknown
LogSource = ((BaseUnityPlugin)this).Logger;
ModEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("1. General", "ModEnabled", true, "Enable or disable custom Scout Gem petrify configuration.");
UseCustomFlatValues = ((BaseUnityPlugin)this).Config.Bind<bool>("1. General", "UseCustomFlatValues", true, "If true, uses the exact flat petrify values configured below. If false, applies the Global Multiplier to default values.");
GlobalPetrifyMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("1. General", "GlobalPetrifyMultiplier", 0f, new ConfigDescription("Global multiplier applied to gem petrify penalty when 'UseCustomFlatValues' is false (0.0 = 0% penalty, 1.0 = 100% normal penalty).", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 2f), Array.Empty<object>()));
AmbitionPetrifyCost = ((BaseUnityPlugin)this).Config.Bind<float>("2. Gem Petrify Values", "ScoutsAmbitionPetrify", 0f, new ConfigDescription("Petrify penalty inflicted when using Scout's Ambition.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 100f), Array.Empty<object>()));
GenerosityPetrifyCost = ((BaseUnityPlugin)this).Config.Bind<float>("2. Gem Petrify Values", "ScoutsGenerosityPetrify", 0f, new ConfigDescription("Petrify penalty inflicted when using Scout's Generosity.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 100f), Array.Empty<object>()));
TenacityPetrifyCost = ((BaseUnityPlugin)this).Config.Bind<float>("2. Gem Petrify Values", "ScoutsTenacityPetrify", 0f, new ConfigDescription("Petrify penalty inflicted when using Scout's Tenacity.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 100f), Array.Empty<object>()));
InitiativePetrifyCost = ((BaseUnityPlugin)this).Config.Bind<float>("2. Gem Petrify Values", "ScoutsInitiativePetrify", 0f, new ConfigDescription("Petrify penalty inflicted when using Scout's Initiative.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 100f), Array.Empty<object>()));
StrangeGemPetrifyCost = ((BaseUnityPlugin)this).Config.Bind<float>("2. Gem Petrify Values", "StrangeGemPetrify", 0f, new ConfigDescription("Petrify penalty inflicted when activating Strange Gem / Relics.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 100f), Array.Empty<object>()));
GenericGemPetrifyCost = ((BaseUnityPlugin)this).Config.Bind<float>("2. Gem Petrify Values", "OtherGemsPetrify", 0f, new ConfigDescription("Fallback petrify penalty for any other unidentified Scout Gems/Amulets.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 100f), Array.Empty<object>()));
LogSource.LogInfo((object)"ScoutGemPetrifyConfig v1.1.0 initialized.");
try
{
_harmony = new Harmony("com.modder.peak.scoutgempetrifyconfig");
_harmony.PatchAll(Assembly.GetExecutingAssembly());
LogSource.LogInfo((object)"ScoutGemPetrifyConfig successfully patched Scout Gem petrify mechanics!");
}
catch (Exception arg)
{
LogSource.LogError((object)string.Format("Failed to patch methods in {0}: {1}", "ScoutGemPetrifyConfig", arg));
}
}
public static float GetConfiguredPetrifyCost(string itemName, float originalCost)
{
if (!ModEnabled.Value)
{
return originalCost;
}
if (!UseCustomFlatValues.Value)
{
return Mathf.Max(0f, originalCost * GlobalPetrifyMultiplier.Value);
}
string text = itemName.ToLowerInvariant();
if (text.Contains("ambition"))
{
return AmbitionPetrifyCost.Value;
}
if (text.Contains("generosity"))
{
return GenerosityPetrifyCost.Value;
}
if (text.Contains("tenacity"))
{
return TenacityPetrifyCost.Value;
}
if (text.Contains("initiative"))
{
return InitiativePetrifyCost.Value;
}
if (text.Contains("strange"))
{
return StrangeGemPetrifyCost.Value;
}
return GenericGemPetrifyCost.Value;
}
private void OnDestroy()
{
Harmony harmony = _harmony;
if (harmony != null)
{
harmony.UnpatchSelf();
}
}
}
[HarmonyPatch]
public static class ScoutGemUsagePatches
{
[HarmonyTargetMethods]
public static IEnumerable<MethodBase> TargetItemMethods()
{
string[] array = new string[10] { "AmuletItem", "ScoutGemItem", "MysticalItem", "ScoutAmbition", "ScoutGenerosity", "ScoutTenacity", "ScoutInitiative", "StrangeGemItem", "ItemUsageHandler", "ScoutItem" };
string[] array2 = array;
foreach (string text in array2)
{
Type type = AccessTools.TypeByName(text) ?? AccessTools.TypeByName("PEAK." + text) ?? AccessTools.TypeByName("PEAK.Items." + text);
if (!(type == null))
{
MethodInfo methodInfo = AccessTools.Method(type, "Use", (Type[])null, (Type[])null) ?? AccessTools.Method(type, "OnUse", (Type[])null, (Type[])null) ?? AccessTools.Method(type, "Activate", (Type[])null, (Type[])null) ?? AccessTools.Method(type, "TriggerAbility", (Type[])null, (Type[])null) ?? AccessTools.Method(type, "ConsumeItem", (Type[])null, (Type[])null);
if (methodInfo != null)
{
yield return methodInfo;
}
}
}
}
[HarmonyPrefix]
public static void PrefixItemUse(object __instance)
{
if (NoPetrifyGemsPlugin.ModEnabled.Value && __instance != null)
{
string name = __instance.GetType().Name;
FieldInfo fieldInfo = AccessTools.Field(__instance.GetType(), "petrifyCost") ?? AccessTools.Field(__instance.GetType(), "petrifyAmount") ?? AccessTools.Field(__instance.GetType(), "petrifyPenalty") ?? AccessTools.Field(__instance.GetType(), "stoneCost");
if (fieldInfo != null)
{
float num = Convert.ToSingle(fieldInfo.GetValue(__instance));
float configuredPetrifyCost = NoPetrifyGemsPlugin.GetConfiguredPetrifyCost(name, num);
fieldInfo.SetValue(__instance, configuredPetrifyCost);
NoPetrifyGemsPlugin.LogSource.LogDebug((object)$"[ScoutGemConfig] Adjusted {name} petrify cost from {num} to {configuredPetrifyCost}.");
}
}
}
}
[HarmonyPatch]
public static class PetrifyStatusPatches
{
[HarmonyTargetMethods]
public static IEnumerable<MethodBase> TargetMethods()
{
string[] array = new string[5] { "PlayerStatus", "CharacterStats", "ScoutStatus", "StatusEffectManager", "PlayerController" };
string[] targetMethodNames = new string[5] { "AddPetrify", "ApplyPetrify", "AddStatusEffect", "IncreasePetrify", "ModifyPetrify" };
string[] array2 = array;
foreach (string text in array2)
{
Type type = AccessTools.TypeByName(text) ?? AccessTools.TypeByName("PEAK." + text);
if (type == null)
{
continue;
}
string[] array3 = targetMethodNames;
foreach (string text2 in array3)
{
MethodInfo methodInfo = AccessTools.Method(type, text2, new Type[1] { typeof(float) }, (Type[])null) ?? AccessTools.Method(type, text2, (Type[])null, (Type[])null);
if (methodInfo != null)
{
yield return methodInfo;
}
}
}
}
[HarmonyPrefix]
public static bool InterceptPetrify(ref float amount)
{
if (!NoPetrifyGemsPlugin.ModEnabled.Value)
{
return true;
}
if (!NoPetrifyGemsPlugin.UseCustomFlatValues.Value)
{
amount *= Mathf.Clamp01(NoPetrifyGemsPlugin.GlobalPetrifyMultiplier.Value);
if (amount <= 0.001f)
{
amount = 0f;
return false;
}
}
return true;
}
}
}