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;
}
}