Decompiled source of WheelchairFishing v1.0.1

BepInEx/plugins/OneClickFishingRod.dll

Decompiled a month ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
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.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("OneClickFishingRod")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("OneClickFishingRod")]
[assembly: AssemblyCopyright("Copyright ©  2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("28f32067-7662-4543-92e0-f420a90b3a14")]
[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")]
[BepInPlugin("com.lan.OneClickFishingRod", "轮椅钓鱼", "1.0.0")]
public class OneClickFishingRod : BaseUnityPlugin
{
	public static ConfigEntry<bool> isSetGreyFishProbability;

	public static ConfigEntry<int> greyFishProbability;

	public static ConfigEntry<bool> isSetGreenFishProbability;

	public static ConfigEntry<int> greenFishProbability;

	public static ConfigEntry<bool> isSetCrapProbability;

	public static ConfigEntry<int> crapProbability;

	public static ConfigEntry<bool> isSetOrangeRoughyProbability;

	public static ConfigEntry<int> orangeRoughyProbability;

	public static ConfigEntry<bool> isSetOctopusProbability;

	public static ConfigEntry<int> octopusProbability;

	public static ConfigEntry<bool> isSetSwordFishProbability;

	public static ConfigEntry<int> swordFishProbability;

	public static ConfigEntry<bool> isSetBabySharkProbability;

	public static ConfigEntry<int> babySharkProbability;

	public static ConfigEntry<bool> isAddStoneInItem;

	public static ConfigEntry<bool> isAddBoneInItem;

	public static List<ItemSO> stoneItem = new List<ItemSO>();

	public static List<ItemSO> boneItem = new List<ItemSO>();

	public static ConfigEntry<float> minWaitTime;

	public static ConfigEntry<float> maxWaitTime;

	public static Dictionary<string, int> fishZoneProbabilityMap = new Dictionary<string, int>();

	private void Awake()
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_000c: Expected O, but got Unknown
		Harmony val = new Harmony("com.lan.OneClickFishingRod");
		val.PatchAll();
		Debug.LogWarning((object)"轮椅钓鱼模组加载成功 --作者:她说缝上都不给我");
		setFishProbability();
	}

	private void setFishProbability()
	{
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Expected O, but got Unknown
		//IL_004e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0054: Expected O, but got Unknown
		//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bc: Expected O, but got Unknown
		//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f0: Expected O, but got Unknown
		//IL_0152: Unknown result type (might be due to invalid IL or missing references)
		//IL_0159: Expected O, but got Unknown
		//IL_0188: Unknown result type (might be due to invalid IL or missing references)
		//IL_018f: Expected O, but got Unknown
		//IL_01f2: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f9: Expected O, but got Unknown
		//IL_0228: Unknown result type (might be due to invalid IL or missing references)
		//IL_022f: Expected O, but got Unknown
		//IL_0292: Unknown result type (might be due to invalid IL or missing references)
		//IL_0299: Expected O, but got Unknown
		//IL_02c8: Unknown result type (might be due to invalid IL or missing references)
		//IL_02cf: Expected O, but got Unknown
		//IL_0332: Unknown result type (might be due to invalid IL or missing references)
		//IL_0339: Expected O, but got Unknown
		//IL_0368: Unknown result type (might be due to invalid IL or missing references)
		//IL_036f: Expected O, but got Unknown
		//IL_03d1: Unknown result type (might be due to invalid IL or missing references)
		//IL_03d8: Expected O, but got Unknown
		//IL_0407: Unknown result type (might be due to invalid IL or missing references)
		//IL_040e: Expected O, but got Unknown
		//IL_0470: Unknown result type (might be due to invalid IL or missing references)
		//IL_0477: Expected O, but got Unknown
		//IL_04ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_04b4: Expected O, but got Unknown
		//IL_04ea: Unknown result type (might be due to invalid IL or missing references)
		//IL_04f1: Expected O, but got Unknown
		//IL_050a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0511: Expected O, but got Unknown
		ConfigDescription val = new ConfigDescription("灰鱼", (AcceptableValueBase)(object)new AcceptableValueList<bool>(new bool[2] { true, false }), Array.Empty<object>());
		isSetGreyFishProbability = ((BaseUnityPlugin)this).Config.Bind<bool>("灰鱼概率修改", "是否开启概率修改", false, val);
		ConfigDescription val2 = new ConfigDescription("灰鱼", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>());
		greyFishProbability = ((BaseUnityPlugin)this).Config.Bind<int>("灰鱼概率修改", "概率", 40, val2);
		if (isSetGreyFishProbability.Value)
		{
			fishZoneProbabilityMap.Add("grey_fish", greyFishProbability.Value);
		}
		ConfigDescription val3 = new ConfigDescription("绿鱼", (AcceptableValueBase)(object)new AcceptableValueList<bool>(new bool[2] { true, false }), Array.Empty<object>());
		isSetGreenFishProbability = ((BaseUnityPlugin)this).Config.Bind<bool>("绿鱼概率修改", "是否开启概率修改", false, val3);
		ConfigDescription val4 = new ConfigDescription("绿鱼", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>());
		greenFishProbability = ((BaseUnityPlugin)this).Config.Bind<int>("绿鱼概率修改", "概率", 35, val4);
		if (isSetGreenFishProbability.Value)
		{
			fishZoneProbabilityMap.Add("green_fish", greenFishProbability.Value);
		}
		ConfigDescription val5 = new ConfigDescription("鲤鱼", (AcceptableValueBase)(object)new AcceptableValueList<bool>(new bool[2] { true, false }), Array.Empty<object>());
		isSetCrapProbability = ((BaseUnityPlugin)this).Config.Bind<bool>("鲤鱼概率修改", "是否开启概率修改", false, val5);
		ConfigDescription val6 = new ConfigDescription("鲤鱼", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>());
		crapProbability = ((BaseUnityPlugin)this).Config.Bind<int>("鲤鱼概率修改", "概率", 20, val6);
		if (isSetCrapProbability.Value)
		{
			fishZoneProbabilityMap.Add("carp", crapProbability.Value);
		}
		ConfigDescription val7 = new ConfigDescription("章鱼", (AcceptableValueBase)(object)new AcceptableValueList<bool>(new bool[2] { true, false }), Array.Empty<object>());
		isSetOctopusProbability = ((BaseUnityPlugin)this).Config.Bind<bool>("章鱼概率修改", "是否开启概率修改", false, val7);
		ConfigDescription val8 = new ConfigDescription("章鱼", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>());
		octopusProbability = ((BaseUnityPlugin)this).Config.Bind<int>("章鱼概率修改", "概率", 15, val8);
		if (isSetOctopusProbability.Value)
		{
			fishZoneProbabilityMap.Add("octopus", octopusProbability.Value);
		}
		ConfigDescription val9 = new ConfigDescription("罗非鱼", (AcceptableValueBase)(object)new AcceptableValueList<bool>(new bool[2] { true, false }), Array.Empty<object>());
		isSetOrangeRoughyProbability = ((BaseUnityPlugin)this).Config.Bind<bool>("罗非鱼概率修改", "是否开启概率修改", false, val9);
		ConfigDescription val10 = new ConfigDescription("罗非鱼", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>());
		orangeRoughyProbability = ((BaseUnityPlugin)this).Config.Bind<int>("罗非鱼概率修改", "概率", 15, val10);
		if (isSetOrangeRoughyProbability.Value)
		{
			fishZoneProbabilityMap.Add("orange_roughy", orangeRoughyProbability.Value);
		}
		ConfigDescription val11 = new ConfigDescription("剑鱼", (AcceptableValueBase)(object)new AcceptableValueList<bool>(new bool[2] { true, false }), Array.Empty<object>());
		isSetSwordFishProbability = ((BaseUnityPlugin)this).Config.Bind<bool>("剑鱼概率修改", "是否开启概率修改", false, val11);
		ConfigDescription val12 = new ConfigDescription("剑鱼", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>());
		swordFishProbability = ((BaseUnityPlugin)this).Config.Bind<int>("剑鱼概率修改", "概率", 5, val12);
		if (isSetSwordFishProbability.Value)
		{
			fishZoneProbabilityMap.Add("swordfish", swordFishProbability.Value);
		}
		ConfigDescription val13 = new ConfigDescription("鲨鱼", (AcceptableValueBase)(object)new AcceptableValueList<bool>(new bool[2] { true, false }), Array.Empty<object>());
		isSetBabySharkProbability = ((BaseUnityPlugin)this).Config.Bind<bool>("鲨鱼概率修改", "是否开启概率修改", false, val13);
		ConfigDescription val14 = new ConfigDescription("鲨鱼", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>());
		babySharkProbability = ((BaseUnityPlugin)this).Config.Bind<int>("鲨鱼概率修改", "概率", 4, val14);
		if (isSetBabySharkProbability.Value)
		{
			fishZoneProbabilityMap.Add("baby_shark", babySharkProbability.Value);
		}
		ConfigDescription val15 = new ConfigDescription("矿石", (AcceptableValueBase)(object)new AcceptableValueList<bool>(new bool[2] { true, false }), Array.Empty<object>());
		isAddStoneInItem = ((BaseUnityPlugin)this).Config.Bind<bool>("石头渔获", "是否开启石头渔获", false, val15);
		ConfigDescription val16 = new ConfigDescription("其他材料", (AcceptableValueBase)(object)new AcceptableValueList<bool>(new bool[2] { true, false }), Array.Empty<object>());
		isAddBoneInItem = ((BaseUnityPlugin)this).Config.Bind<bool>("动物材料渔获", "是否开启动物材料渔获", false, val16);
		ConfigDescription val17 = new ConfigDescription("最小钓鱼上钩等待时间(秒)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 5f), Array.Empty<object>());
		ConfigDescription val18 = new ConfigDescription("最大钓鱼上钩等待时间(秒)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.2f, 15f), Array.Empty<object>());
		minWaitTime = ((BaseUnityPlugin)this).Config.Bind<float>("钓鱼时间设置", "最小等待时间", 0.8f, val17);
		maxWaitTime = ((BaseUnityPlugin)this).Config.Bind<float>("钓鱼时间设置", "最大等待时间", 1.5f, val18);
	}
}
[HarmonyPatch]
public static class FishingRod_Patch
{
	private static readonly FieldInfo _playerInventoryField = AccessTools.Field(typeof(FishingRod), "playerInventory");

	private static readonly MethodInfo _checkBaitMethod = AccessTools.Method(typeof(FishingRod), "CheckBait", (Type[])null, (Type[])null);

	private static readonly FieldInfo _targetBaitPosition = AccessTools.Field(typeof(FishingRod), "targetBaitPosition");

	[HarmonyPrefix]
	[HarmonyPatch(typeof(FishingRod), "PullFish")]
	private static bool PullFishPatch(FishingRod __instance)
	{
		//IL_000c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Expected O, but got Unknown
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		//IL_0042: Unknown result type (might be due to invalid IL or missing references)
		PlayerInventory val = (PlayerInventory)_playerInventoryField.GetValue(__instance);
		InventorySlot currentInventorySlot = val.GetCurrentInventorySlot();
		int amount = currentInventorySlot.amount;
		bool flag = false;
		__instance.PullBait();
		currentInventorySlot.amount = 0;
		val.slots[val.currentSlot.Value] = currentInventorySlot;
		val.ReduceCurrentItemAmount();
		SpawnItem spawnItem = new SpawnItem();
		List<ItemSO> list = NewCheckBait(amount, __instance);
		float xPoint = 1.5f;
		float yPoint = 1f;
		float zPoint = 2f;
		float xPoint2 = 0f;
		float yPoint2 = 1f;
		float zPoint2 = 0.25f;
		float xPoint3 = -2f;
		float yPoint3 = 1f;
		float zPoint3 = -2f;
		foreach (ItemSO item in list)
		{
			if ((Object)(object)item != (Object)null)
			{
				int num = Mathf.Max(((ItemSO)__instance.toolSO).basePrice / ((ItemSO)__instance.toolSO).amount, 1);
				if (item.itemName.Contains("beer") || item.itemName.Contains("whiskey"))
				{
					spawnItem.spawnItemUnderYourFeet(xPoint2, yPoint2, zPoint2, item, val);
				}
				else if (item.itemName.Contains("junk"))
				{
					spawnItem.spawnItemUnderYourFeet(xPoint, yPoint, zPoint, item, val);
				}
				else if (item.itemName.Contains("stone"))
				{
					val.GiveItemServerRpc(item.id, item.amount, num, 0);
				}
				else if (item.basePrice <= 61 && !item.itemName.Contains("fish"))
				{
					spawnItem.spawnItemUnderYourFeet(xPoint3, yPoint3, zPoint3, item, val);
				}
				else
				{
					val.GiveItemServerRpc(item.id, item.amount, num, 0);
				}
				if (flag)
				{
					GameManager.Instance.TriggerAchievement("catch_fish");
				}
			}
		}
		GameManager.Instance.audioSource.PlayOneShot(__instance.audioCatch, 0.2f);
		return false;
	}

	[HarmonyPatch(typeof(FishingRod), "Start")]
	[HarmonyPostfix]
	private static void ModifyFishingTimes(FishingRod __instance)
	{
		__instance.minFishTime = OneClickFishingRod.minWaitTime.Value;
		__instance.maxFishTime = OneClickFishingRod.maxWaitTime.Value;
	}

	public static List<ItemSO> NewCheckBait(int amount, FishingRod fishingRod)
	{
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		List<ItemSO> list = new List<ItemSO>();
		Vector3 val = (Vector3)_targetBaitPosition.GetValue(fishingRod);
		FishingZone val2 = null;
		Collider[] array = Physics.OverlapSphere(val, 1f);
		foreach (Collider val3 in array)
		{
			if (((Component)val3).CompareTag("FishingZone"))
			{
				val2 = ((Component)val3).GetComponent<FishingZone>();
				break;
			}
		}
		List<FishType> list2 = new List<FishType>();
		if ((Object)(object)val2 != (Object)null)
		{
			list2 = val2.fishes.Where((FishType x) => x.allowFishingRod).ToList();
			if (list2.Count > 0)
			{
				for (int j = 0; j < list2.Count; j++)
				{
					FishType val4 = list2[j];
					if (OneClickFishingRod.fishZoneProbabilityMap.ContainsKey(val4.itemSO.itemName))
					{
						val2.probability = OneClickFishingRod.fishZoneProbabilityMap[val4.itemSO.itemName];
					}
				}
			}
		}
		List<ItemSO> list3 = new List<ItemSO>();
		List<ItemSO> list4 = new List<ItemSO>();
		if (OneClickFishingRod.isAddBoneInItem.Value || OneClickFishingRod.isAddStoneInItem.Value)
		{
			list3 = Resources.FindObjectsOfTypeAll<ItemSO>().ToList();
		}
		if (OneClickFishingRod.isAddStoneInItem.Value && OneClickFishingRod.stoneItem.Count == 0)
		{
			foreach (ItemSO item3 in list3)
			{
				if (item3.itemName.Contains("stone") && !item3.itemName.Contains("stand"))
				{
					ItemSO item = item3;
					OneClickFishingRod.stoneItem.Add(item);
					OneClickFishingRod.stoneItem.Add(item);
				}
			}
			list4.AddRange(OneClickFishingRod.stoneItem);
		}
		else if (OneClickFishingRod.stoneItem.Count > 0)
		{
			list4.AddRange(OneClickFishingRod.stoneItem);
		}
		if (OneClickFishingRod.isAddBoneInItem.Value && OneClickFishingRod.boneItem.Count == 0)
		{
			foreach (ItemSO item4 in list3)
			{
				if (item4.itemName.Contains("bone") || item4.itemName.Contains("leather"))
				{
					ItemSO item2 = item4;
					OneClickFishingRod.boneItem.Add(item2);
					OneClickFishingRod.boneItem.Add(item2);
				}
			}
			list4.AddRange(OneClickFishingRod.boneItem);
		}
		else if (OneClickFishingRod.boneItem.Count > 0)
		{
			list4.AddRange(OneClickFishingRod.boneItem);
		}
		if (fishingRod.commonItems.Count > 0)
		{
			list4.AddRange(fishingRod.commonItems);
		}
		list3.Clear();
		for (int k = 0; k < amount; k++)
		{
			if ((Object)(object)val2 != (Object)null && Random.Range(0f, 100f) <= (float)val2.probability)
			{
				if (list2.Count > 0)
				{
					int index = Random.Range(0, list2.Count);
					list.Add(list2[index].itemSO);
				}
			}
			else if (Random.Range(0f, 100f) <= (float)fishingRod.fishProbability)
			{
				if (fishingRod.commonFishes.Count > 0)
				{
					int index2 = Random.Range(0, fishingRod.commonFishes.Count);
					list.Add((ItemSO)(object)fishingRod.commonFishes[index2]);
				}
			}
			else if (list4.Count > 0)
			{
				int index3 = Random.Range(0, list4.Count);
				list.Add(list4[index3]);
			}
		}
		return list;
	}
}
public class SpawnItem
{
	private static readonly FieldInfo _playerCamera = AccessTools.Field(typeof(PlayerInventory), "playerCamera");

	public void spawnItemUnderYourFeet(float xPoint, float yPoint, float zPoint, ItemSO itemSO, PlayerInventory playerInventory)
	{
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0013: Expected O, but got Unknown
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		//IL_002b: 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_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0041: Unknown result type (might be due to invalid IL or missing references)
		//IL_0046: 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)
		//IL_005b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0060: Unknown result type (might be due to invalid IL or missing references)
		//IL_006c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0071: Unknown result type (might be due to invalid IL or missing references)
		//IL_0074: Unknown result type (might be due to invalid IL or missing references)
		//IL_0083: Unknown result type (might be due to invalid IL or missing references)
		//IL_0088: Unknown result type (might be due to invalid IL or missing references)
		//IL_0095: Unknown result type (might be due to invalid IL or missing references)
		//IL_0096: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a8: 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)
		Camera val = (Camera)_playerCamera.GetValue(playerInventory);
		Vector3 val2 = ((Component)playerInventory).transform.position + ((Component)val).transform.right * xPoint + ((Component)val).transform.forward * zPoint + new Vector3(0f, yPoint, 0f);
		Quaternion rotation = ((Component)val).transform.rotation;
		Quaternion val3 = Quaternion.Euler(0f, ((Quaternion)(ref rotation)).eulerAngles.y, 0f);
		GameManager.Instance.SpawnItemAtPositionServerRpc(itemSO.id, val2, val3 * itemSO.prefab.transform.rotation, false, ((Component)val).transform.forward, itemSO.amount, -1, -1);
	}
}