Decompiled source of BetterFishing v0.2.3

BetterFishing.dll

Decompiled 4 hours ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("SmartFishing")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("SmartFishing")]
[assembly: AssemblyCopyright("Copyright ©  2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("5adf077a-740b-4e39-8ede-7f719ad19c53")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace BetterFishing;

[BepInPlugin("kam1goroshi.BetterFishing", "Better Fishing", "0.2.3")]
[BepInProcess("valheim.exe")]
public class BetterFishing : BaseUnityPlugin
{
	[HarmonyPatch(typeof(FishingFloat), "Awake")]
	private class FishingFixedUpdatePatch
	{
		private static void Postfix(ref float ___m_fishingSkillImproveHookedMultiplier)
		{
			___m_fishingSkillImproveHookedMultiplier = hookExpMultiplier.Value;
		}
	}

	[HarmonyPatch(typeof(FishingFloat), "Catch")]
	private class FishCatchPatch
	{
		private static void Prefix(Fish fish, Character owner)
		{
			ItemDrop val = (Object.op_Implicit((Object)(object)fish) ? ((Component)fish).gameObject.GetComponent<ItemDrop>() : null);
			if (Object.op_Implicit((Object)(object)fish))
			{
				string name = ((Object)((Humanoid)Player.m_localPlayer).GetAmmoItem().m_dropPrefab).name;
				float expGainOnCatch = getExpGainOnCatch(val.m_itemData.m_quality, name);
				((Character)Player.m_localPlayer).RaiseSkill((SkillType)104, expGainOnCatch);
			}
			else
			{
				Debug.LogError((object)"null fish in FishCatchPatch");
			}
		}
	}

	[HarmonyPatch(typeof(Fish), "Pickup")]
	private class FishPickupPatch
	{
		private static void Prefix(Fish __instance)
		{
			ItemDrop component = ((Component)__instance).GetComponent<ItemDrop>();
			if ((Object)(object)component != (Object)null)
			{
				if (__instance.IsHooked())
				{
					string name = ((Object)((Humanoid)Player.m_localPlayer).GetAmmoItem().m_dropPrefab).name;
					float expGainOnCatch = getExpGainOnCatch(component.m_itemData.m_quality, name);
					((Character)Player.m_localPlayer).RaiseSkill((SkillType)104, expGainOnCatch);
				}
			}
			else
			{
				Debug.LogError((object)"null fish in FishPickupPatch");
			}
		}
	}

	private readonly Harmony harmony = new Harmony("kam1goroshi.BetterFishing");

	private static Dictionary<string, float> baitBonusExpMap = new Dictionary<string, float>();

	private static ConfigEntry<float> hookExpMultiplier;

	private static ConfigEntry<float> stepsForCatch;

	private static ConfigEntry<float> bonusPerFishLevel;

	private static ConfigEntry<float> fishingBaitBonus;

	private static ConfigEntry<float> fishingBaitForestBonus;

	private static ConfigEntry<float> fishingBaitSwampBonus;

	private static ConfigEntry<float> fishingBaitCaveBonus;

	private static ConfigEntry<float> fishingBaitPlainsBonus;

	private static ConfigEntry<float> fishingBaitOceanBonus;

	private static ConfigEntry<float> fishingBaitAshlandsBonus;

	private static ConfigEntry<float> fishingBaitDeepNorthBonus;

	private static ConfigEntry<float> fishingBaitMistlandsBonus;

	private void Awake()
	{
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0038: Expected O, but got Unknown
		//IL_006b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0075: Expected O, but got Unknown
		//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b2: Expected O, but got Unknown
		//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ef: Expected O, but got Unknown
		//IL_0122: Unknown result type (might be due to invalid IL or missing references)
		//IL_012c: Expected O, but got Unknown
		//IL_015f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0169: Expected O, but got Unknown
		//IL_019c: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a6: Expected O, but got Unknown
		//IL_01d9: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e3: Expected O, but got Unknown
		//IL_0216: Unknown result type (might be due to invalid IL or missing references)
		//IL_0220: Expected O, but got Unknown
		//IL_0253: Unknown result type (might be due to invalid IL or missing references)
		//IL_025d: Expected O, but got Unknown
		//IL_0290: Unknown result type (might be due to invalid IL or missing references)
		//IL_029a: Expected O, but got Unknown
		//IL_02cd: Unknown result type (might be due to invalid IL or missing references)
		//IL_02d7: Expected O, but got Unknown
		hookExpMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("General", "Hook_Exp_Multiplier", 2f, new ConfigDescription("Reeling exp with a hooked fish compared to vanilla empty reel. Vanilla/Default: 2x", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 5f), Array.Empty<object>()));
		stepsForCatch = ((BaseUnityPlugin)this).Config.Bind<float>("General", "Steps_For_Catch", 10f, new ConfigDescription("Catching bonus compared to vanilla empty reel. 0 gives no bonus in any case", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 100f), Array.Empty<object>()));
		bonusPerFishLevel = ((BaseUnityPlugin)this).Config.Bind<float>("General", "Bonus_Per_Fish_Level", 0.5f, new ConfigDescription("Exp bonus multiplier given for fish level. 0 for no bonus. With 1.0 a 5 star fish will give +500% exp", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 10f), Array.Empty<object>()));
		fishingBaitBonus = ((BaseUnityPlugin)this).Config.Bind<float>("Fish type bonus", "Simple_Fishing_Bait_bonus", 0f, new ConfigDescription("Bonus exp multiplier for using the default bait. 0 for no additional bonus.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 10f), Array.Empty<object>()));
		fishingBaitForestBonus = ((BaseUnityPlugin)this).Config.Bind<float>("Fish type bonus", "Mossy_Fishing_Bait_bonus", 0.25f, new ConfigDescription("Bonus exp multiplier for using black forrest bait. 0 for no additional bonus.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 10f), Array.Empty<object>()));
		fishingBaitSwampBonus = ((BaseUnityPlugin)this).Config.Bind<float>("Fish type bonus", "Sticky_Fishing_Bait_bonus", 0.4f, new ConfigDescription("Bonus exp multiplier for using swamp bait. 0 for no additional bonus.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 10f), Array.Empty<object>()));
		fishingBaitCaveBonus = ((BaseUnityPlugin)this).Config.Bind<float>("Fish type bonus", "Cold_Fishing_Bait_bonus", 0.8f, new ConfigDescription("Bonus exp multiplier for using cave bait. 0 for no additional bonus.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 10f), Array.Empty<object>()));
		fishingBaitPlainsBonus = ((BaseUnityPlugin)this).Config.Bind<float>("Fish type bonus", "Stingy_Fishing_Bait_bonus", 0.5f, new ConfigDescription("Bonus exp multiplier for using plains bait. 0 for no additional bonus.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 10f), Array.Empty<object>()));
		fishingBaitOceanBonus = ((BaseUnityPlugin)this).Config.Bind<float>("Fish type bonus", "Heavy_Fishing_Bait_bonus", 1.2f, new ConfigDescription("Bonus exp multiplier for using ocean bait. 0 for no additional bonus.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 10f), Array.Empty<object>()));
		fishingBaitMistlandsBonus = ((BaseUnityPlugin)this).Config.Bind<float>("Fish type bonus", "Misty_Fishing_Bait_bonus", 0.75f, new ConfigDescription("Bonus exp multiplier for using mistlands bait. 0 for no additional bonus.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 10f), Array.Empty<object>()));
		fishingBaitAshlandsBonus = ((BaseUnityPlugin)this).Config.Bind<float>("Fish type bonus", "Hot_Fishing_Bait_bonus", 1f, new ConfigDescription("Bonus exp multiplier for using ashlands bait. 0 for no additional bonus.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 10f), Array.Empty<object>()));
		fishingBaitDeepNorthBonus = ((BaseUnityPlugin)this).Config.Bind<float>("Fish type bonus", "Frosty_Fishing_Bait_bonus", 1.3f, new ConfigDescription("Bonus exp multiplier for using deep north bait. 0 for no additional bonus.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 10f), Array.Empty<object>()));
		baitBonusExpMap.Add("FishingBait", fishingBaitBonus.Value);
		baitBonusExpMap.Add("FishingBaitForest", fishingBaitForestBonus.Value);
		baitBonusExpMap.Add("FishingBaitSwamp", fishingBaitSwampBonus.Value);
		baitBonusExpMap.Add("FishingBaitCave", fishingBaitCaveBonus.Value);
		baitBonusExpMap.Add("FishingBaitPlains", fishingBaitPlainsBonus.Value);
		baitBonusExpMap.Add("FishingBaitOcean", fishingBaitOceanBonus.Value);
		baitBonusExpMap.Add("FishingBaitMistlands", fishingBaitMistlandsBonus.Value);
		baitBonusExpMap.Add("FishingBaitAshlands", fishingBaitAshlandsBonus.Value);
		baitBonusExpMap.Add("FishingBaitDeepNorth", fishingBaitDeepNorthBonus.Value);
		harmony.PatchAll();
	}

	private void OnDestroy()
	{
		harmony.UnpatchSelf();
	}

	private static float getExpGainOnCatch(float quality, string baitPrefabName)
	{
		float value = stepsForCatch.Value;
		value *= 1f + bonusPerFishLevel.Value * (quality - 1f);
		if (baitBonusExpMap.TryGetValue(baitPrefabName, out var value2))
		{
			return value * (value2 + 1f);
		}
		Debug.LogError((object)"Key wasn't found in bait bonus map.");
		return value;
	}
}