Decompiled source of BasicIncrease v0.1.0

BasicIncrease.dll

Decompiled 8 hours ago
using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
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("BasicIncrease")]
[assembly: AssemblyDescription("基础属性增强模组")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("hyy")]
[assembly: AssemblyProduct("BasicIncrease")]
[assembly: AssemblyCopyright("Copyright © hyy 2026")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("00000000-0000-0000-0000-000000000000")]
[assembly: AssemblyFileVersion("0.1.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.1.0.0")]
[module: UnverifiableCode]
namespace BasicIncrease;

[BepInPlugin("com.hyy.basicincrease", "基础属性增强", "0.1.0")]
[BepInProcess("REPO.exe")]
public class Plugin : BaseUnityPlugin
{
	public static Plugin Instance;

	public static ConfigEntry<float> MoveSpeedMultiplier;

	public static ConfigEntry<float> SprintSpeedMultiplier;

	public static ConfigEntry<float> CrouchSpeedMultiplier;

	public static ConfigEntry<float> JumpForceMultiplier;

	public static ConfigEntry<int> ExtraJumps;

	public static ConfigEntry<float> GravityMultiplier;

	public static ConfigEntry<float> StaminaDrainMultiplier;

	public static ConfigEntry<float> StaminaRegenMultiplier;

	public static ConfigEntry<float> StaminaRegenDelayMultiplier;

	public static ConfigEntry<bool> InfiniteStamina;

	public static ConfigEntry<float> GrabStrengthMultiplier;

	public static ConfigEntry<float> ThrowStrengthMultiplier;

	public static ConfigEntry<float> GrabRangeMultiplier;

	private readonly Harmony harmony = new Harmony("com.hyy.basicincrease");

	public static void LogInfo(string message)
	{
		((BaseUnityPlugin)Instance).Logger.LogInfo((object)message);
	}

	public static void LogError(string message)
	{
		((BaseUnityPlugin)Instance).Logger.LogError((object)message);
	}

	public static void LogWarning(string message)
	{
		((BaseUnityPlugin)Instance).Logger.LogWarning((object)message);
	}

	private void Awake()
	{
		//IL_0035: Unknown result type (might be due to invalid IL or missing references)
		//IL_003f: Expected O, but got Unknown
		//IL_0072: Unknown result type (might be due to invalid IL or missing references)
		//IL_007c: Expected O, but got Unknown
		//IL_00af: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b9: Expected O, but got Unknown
		//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f6: Expected O, but got Unknown
		//IL_011e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0128: Expected O, but got Unknown
		//IL_015b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0165: Expected O, but got Unknown
		//IL_0198: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a2: Expected O, but got Unknown
		//IL_01d5: Unknown result type (might be due to invalid IL or missing references)
		//IL_01df: Expected O, but got Unknown
		//IL_0212: Unknown result type (might be due to invalid IL or missing references)
		//IL_021c: Expected O, but got Unknown
		//IL_023d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0247: Expected O, but got Unknown
		//IL_027a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0284: Expected O, but got Unknown
		//IL_02b7: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c1: Expected O, but got Unknown
		//IL_02f4: Unknown result type (might be due to invalid IL or missing references)
		//IL_02fe: Expected O, but got Unknown
		Instance = this;
		MoveSpeedMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("移动", "移动速度倍数", 1.5f, new ConfigDescription("基础移动速度的倍数 (默认: 1.5)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 10f), Array.Empty<object>()));
		SprintSpeedMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("移动", "冲刺速度倍数", 1.5f, new ConfigDescription("冲刺速度的倍数 (默认: 1.5)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 10f), Array.Empty<object>()));
		CrouchSpeedMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("移动", "蹲伏速度倍数", 1.5f, new ConfigDescription("蹲伏移动速度的倍数 (默认: 1.5)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 10f), Array.Empty<object>()));
		JumpForceMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("跳跃", "跳跃高度倍数", 2f, new ConfigDescription("跳跃高度的倍数 (默认: 2.0)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 10f), Array.Empty<object>()));
		ExtraJumps = ((BaseUnityPlugin)this).Config.Bind<int>("跳跃", "额外跳跃次数", 0, new ConfigDescription("空中额外跳跃次数 (默认: 0)", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 10), Array.Empty<object>()));
		GravityMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("物理", "重力倍数", 0.8f, new ConfigDescription("重力的倍数 (值越小重力越弱, 默认: 0.8)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 5f), Array.Empty<object>()));
		StaminaDrainMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("耐力", "耐力消耗倍数", 0.5f, new ConfigDescription("冲刺时耐力消耗速度的倍数 (值越小消耗越慢, 默认: 0.5)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 5f), Array.Empty<object>()));
		StaminaRegenMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("耐力", "耐力回复倍数", 2f, new ConfigDescription("耐力回复速度的倍数 (默认: 2.0)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 10f), Array.Empty<object>()));
		StaminaRegenDelayMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("耐力", "耐力回复延迟倍数", 0.5f, new ConfigDescription("停止冲刺后开始回复耐力的延迟时间的倍数 (值越小回复越快, 默认: 0.5)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 5f), Array.Empty<object>()));
		InfiniteStamina = ((BaseUnityPlugin)this).Config.Bind<bool>("耐力", "无限耐力", false, new ConfigDescription("是否拥有无限耐力 (默认: 关闭)", (AcceptableValueBase)null, Array.Empty<object>()));
		GrabStrengthMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("抓取", "抓取力量倍数", 2f, new ConfigDescription("抓取物体时的力量倍数 (默认: 2.0)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 10f), Array.Empty<object>()));
		ThrowStrengthMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("抓取", "投掷力量倍数", 2f, new ConfigDescription("投掷物体时的力量倍数 (默认: 2.0)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 10f), Array.Empty<object>()));
		GrabRangeMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("抓取", "抓取距离倍数", 1.5f, new ConfigDescription("抓取距离的倍数 (默认: 1.5)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 5f), Array.Empty<object>()));
		harmony.PatchAll();
		((BaseUnityPlugin)this).Logger.LogInfo((object)"基础属性增强模组已加载!");
		((BaseUnityPlugin)this).Logger.LogInfo((object)"作者: hyy | 版本: 0.1.0");
		((BaseUnityPlugin)this).Logger.LogInfo((object)$"移动速度倍数: {MoveSpeedMultiplier.Value}");
		((BaseUnityPlugin)this).Logger.LogInfo((object)$"冲刺速度倍数: {SprintSpeedMultiplier.Value}");
		((BaseUnityPlugin)this).Logger.LogInfo((object)$"跳跃高度倍数: {JumpForceMultiplier.Value}");
		((BaseUnityPlugin)this).Logger.LogInfo((object)$"抓取力量倍数: {GrabStrengthMultiplier.Value}");
	}
}
[HarmonyPatch]
public class PlayerControllerPatches
{
	private static float originalMoveSpeed;

	private static float originalSprintSpeed;

	private static float originalCrouchSpeed;

	private static float originalCustomGravity;

	private static float originalJumpForce;

	private static float originalEnergySprintDrain;

	private static FieldInfo playerOriginalMoveSpeedField;

	private static FieldInfo playerOriginalSprintSpeedField;

	private static FieldInfo playerOriginalCrouchSpeedField;

	private static FieldInfo playerOriginalCustomGravityField;

	private static FieldInfo jumpExtraField;

	private static FieldInfo sprintRechargeAmountField;

	private static FieldInfo sprintRechargeTimeField;

	private static bool valuesInitialized;

	[HarmonyPatch(typeof(PlayerController), "Start")]
	[HarmonyPostfix]
	private static void StartPostfix(PlayerController __instance)
	{
		if (!valuesInitialized && (Object)(object)__instance != (Object)null)
		{
			try
			{
				originalMoveSpeed = __instance.MoveSpeed;
				originalSprintSpeed = __instance.SprintSpeed;
				originalCrouchSpeed = __instance.CrouchSpeed;
				originalCustomGravity = __instance.CustomGravity;
				originalJumpForce = __instance.JumpForce;
				originalEnergySprintDrain = __instance.EnergySprintDrain;
				Type typeFromHandle = typeof(PlayerController);
				playerOriginalMoveSpeedField = typeFromHandle.GetField("playerOriginalMoveSpeed", BindingFlags.Instance | BindingFlags.NonPublic);
				playerOriginalSprintSpeedField = typeFromHandle.GetField("playerOriginalSprintSpeed", BindingFlags.Instance | BindingFlags.NonPublic);
				playerOriginalCrouchSpeedField = typeFromHandle.GetField("playerOriginalCrouchSpeed", BindingFlags.Instance | BindingFlags.NonPublic);
				playerOriginalCustomGravityField = typeFromHandle.GetField("playerOriginalCustomGravity", BindingFlags.Instance | BindingFlags.NonPublic);
				jumpExtraField = typeFromHandle.GetField("JumpExtra", BindingFlags.Instance | BindingFlags.Public);
				sprintRechargeAmountField = typeFromHandle.GetField("sprintRechargeAmount", BindingFlags.Instance | BindingFlags.NonPublic);
				sprintRechargeTimeField = typeFromHandle.GetField("sprintRechargeTime", BindingFlags.Instance | BindingFlags.NonPublic);
				Plugin.LogInfo($"原始移动速度: {originalMoveSpeed}");
				Plugin.LogInfo($"原始冲刺速度: {originalSprintSpeed}");
				Plugin.LogInfo($"原始跳跃力量: {originalJumpForce}");
				Plugin.LogInfo($"原始耐力消耗: {originalEnergySprintDrain}");
				valuesInitialized = true;
			}
			catch (Exception ex)
			{
				Plugin.LogError("初始化原始值时出错: " + ex.Message);
			}
		}
	}

	private static void ApplyModifications(PlayerController player)
	{
		if (!valuesInitialized || (Object)(object)player == (Object)null)
		{
			return;
		}
		try
		{
			float originalValue = GetOriginalValue(playerOriginalMoveSpeedField, player, originalMoveSpeed);
			float originalValue2 = GetOriginalValue(playerOriginalSprintSpeedField, player, originalSprintSpeed);
			float originalValue3 = GetOriginalValue(playerOriginalCrouchSpeedField, player, originalCrouchSpeed);
			float originalValue4 = GetOriginalValue(playerOriginalCustomGravityField, player, originalCustomGravity);
			player.MoveSpeed = originalMoveSpeed * Plugin.MoveSpeedMultiplier.Value;
			player.SprintSpeed = originalSprintSpeed * Plugin.SprintSpeedMultiplier.Value;
			player.CrouchSpeed = originalCrouchSpeed * Plugin.CrouchSpeedMultiplier.Value;
			SetOriginalValue(playerOriginalMoveSpeedField, player, player.MoveSpeed);
			SetOriginalValue(playerOriginalSprintSpeedField, player, player.SprintSpeed);
			SetOriginalValue(playerOriginalCrouchSpeedField, player, player.CrouchSpeed);
			player.CustomGravity = originalCustomGravity * Plugin.GravityMultiplier.Value;
			SetOriginalValue(playerOriginalCustomGravityField, player, player.CustomGravity);
			player.JumpForce = originalJumpForce * Plugin.JumpForceMultiplier.Value;
			if (jumpExtraField != null)
			{
				jumpExtraField.SetValue(player, Plugin.ExtraJumps.Value);
			}
			player.EnergySprintDrain = originalEnergySprintDrain * Plugin.StaminaDrainMultiplier.Value;
			if (Plugin.InfiniteStamina.Value)
			{
				player.EnergyCurrent = player.EnergyStart;
				player.DebugEnergy = true;
			}
			else
			{
				player.DebugEnergy = false;
			}
		}
		catch (Exception ex)
		{
			Plugin.LogError("应用修改时出错: " + ex.Message);
		}
	}

	private static float GetOriginalValue(FieldInfo field, PlayerController player, float defaultValue)
	{
		if (field != null)
		{
			try
			{
				return (float)field.GetValue(player);
			}
			catch
			{
				return defaultValue;
			}
		}
		return defaultValue;
	}

	private static void SetOriginalValue(FieldInfo field, PlayerController player, float value)
	{
		if (field != null)
		{
			try
			{
				field.SetValue(player, value);
			}
			catch
			{
			}
		}
	}

	[HarmonyPatch(typeof(PlayerController), "FixedUpdate")]
	[HarmonyPostfix]
	private static void FixedUpdatePostfix(PlayerController __instance)
	{
		ApplyModifications(__instance);
	}

	[HarmonyPatch(typeof(PlayerController), "Update")]
	[HarmonyPostfix]
	private static void UpdatePostfix(PlayerController __instance)
	{
		if ((Object)(object)__instance == (Object)null)
		{
			return;
		}
		try
		{
			if (sprintRechargeTimeField != null)
			{
				float num = (float)sprintRechargeTimeField.GetValue(__instance);
				float num2 = num * Plugin.StaminaRegenDelayMultiplier.Value;
				sprintRechargeTimeField.SetValue(__instance, num2);
			}
			if (sprintRechargeAmountField != null)
			{
				float num3 = (float)sprintRechargeAmountField.GetValue(__instance);
				float num4 = num3 * Plugin.StaminaRegenMultiplier.Value;
				sprintRechargeAmountField.SetValue(__instance, num4);
			}
		}
		catch
		{
		}
	}

	[HarmonyPatch(typeof(PlayerController), "OverrideSpeedLogic")]
	[HarmonyPrefix]
	private static bool OverrideSpeedLogicPrefix()
	{
		return false;
	}

	[HarmonyPatch(typeof(PlayerController), "OverrideTimeScaleLogic")]
	[HarmonyPrefix]
	private static bool OverrideTimeScaleLogicPrefix()
	{
		return false;
	}

	[HarmonyPatch(typeof(PlayerController), "OverrideSpeedTick")]
	[HarmonyPrefix]
	private static bool OverrideSpeedTickPrefix()
	{
		return false;
	}

	[HarmonyPatch(typeof(PlayerController), "OverrideTimeScaleTick")]
	[HarmonyPrefix]
	private static bool OverrideTimeScaleTickPrefix()
	{
		return false;
	}
}
[HarmonyPatch]
public class PhysGrabberPatches
{
	private static FieldInfo grabStrengthField;

	private static FieldInfo throwStrengthField;

	private static FieldInfo grabRangeField;

	private static FieldInfo grabReleaseDistanceField;

	private static bool fieldsInitialized;

	private static void InitializeFields()
	{
		if (fieldsInitialized)
		{
			return;
		}
		try
		{
			Type typeFromHandle = typeof(PhysGrabber);
			grabStrengthField = typeFromHandle.GetField("grabStrength", BindingFlags.Instance | BindingFlags.NonPublic);
			throwStrengthField = typeFromHandle.GetField("throwStrength", BindingFlags.Instance | BindingFlags.NonPublic);
			grabRangeField = typeFromHandle.GetField("grabRange", BindingFlags.Instance | BindingFlags.NonPublic);
			grabReleaseDistanceField = typeFromHandle.GetField("grabReleaseDistance", BindingFlags.Instance | BindingFlags.NonPublic);
			Plugin.LogInfo("PhysGrabber字段初始化完成");
			fieldsInitialized = true;
		}
		catch (Exception ex)
		{
			Plugin.LogError("初始化字段时出错: " + ex.Message);
		}
	}

	[HarmonyPatch(typeof(PhysGrabber), "Start")]
	[HarmonyPostfix]
	private static void StartPostfix(PhysGrabber __instance)
	{
		InitializeFields();
		ApplyGrabModifications(__instance);
	}

	[HarmonyPatch(typeof(PhysGrabber), "FixedUpdate")]
	[HarmonyPostfix]
	private static void FixedUpdatePostfix(PhysGrabber __instance)
	{
		ApplyGrabModifications(__instance);
	}

	private static void ApplyGrabModifications(PhysGrabber physGrabber)
	{
		if ((Object)(object)physGrabber == (Object)null)
		{
			return;
		}
		try
		{
			if (grabStrengthField != null)
			{
				float num = 1f;
				float num2 = (float)grabStrengthField.GetValue(physGrabber);
				if (num2 > 0f && num2 < 100f)
				{
					num = num2;
				}
				float num3 = num * Plugin.GrabStrengthMultiplier.Value;
				num3 = Mathf.Clamp(num3, 0.1f, 100f);
				if (Mathf.Abs(num2 - num3) > 0.01f)
				{
					grabStrengthField.SetValue(physGrabber, num3);
				}
			}
			if (throwStrengthField != null)
			{
				float num4 = 1f;
				float num5 = (float)throwStrengthField.GetValue(physGrabber);
				if (num5 > 0f && num5 < 100f)
				{
					num4 = num5;
				}
				float num6 = num4 * Plugin.ThrowStrengthMultiplier.Value;
				num6 = Mathf.Clamp(num6, 0.1f, 100f);
				if (Mathf.Abs(num5 - num6) > 0.01f)
				{
					throwStrengthField.SetValue(physGrabber, num6);
				}
			}
			if (grabRangeField != null)
			{
				float num7 = 4f;
				float num8 = (float)grabRangeField.GetValue(physGrabber);
				if (num8 > 0f && num8 < 100f)
				{
					num7 = num8;
				}
				float num9 = num7 * Plugin.GrabRangeMultiplier.Value;
				num9 = Mathf.Clamp(num9, 1f, 50f);
				if (Mathf.Abs(num8 - num9) > 0.01f)
				{
					grabRangeField.SetValue(physGrabber, num9);
				}
			}
			if (grabReleaseDistanceField != null)
			{
				float num10 = 8f;
				float num11 = (float)grabReleaseDistanceField.GetValue(physGrabber);
				if (num11 > 0f && num11 < 200f)
				{
					num10 = num11;
				}
				float num12 = num10 * Plugin.GrabRangeMultiplier.Value;
				num12 = Mathf.Clamp(num12, 2f, 100f);
				if (Mathf.Abs(num11 - num12) > 0.01f)
				{
					grabReleaseDistanceField.SetValue(physGrabber, num12);
				}
			}
		}
		catch (Exception ex)
		{
			Plugin.LogError("应用抓取修改时出错: " + ex.Message);
		}
	}

	[HarmonyPatch(typeof(PhysGrabObject), "Update")]
	[HarmonyPostfix]
	private static void UpdatePostfix(PhysGrabObject __instance)
	{
		if ((Object)(object)__instance == (Object)null || (Object)(object)__instance.rb == (Object)null)
		{
			return;
		}
		try
		{
			if (__instance.grabbed && Plugin.GrabStrengthMultiplier.Value > 1f)
			{
				if (__instance.massOriginal == 0f)
				{
					__instance.massOriginal = __instance.rb.mass;
				}
				float num = __instance.massOriginal / Plugin.GrabStrengthMultiplier.Value;
				num = Mathf.Max(num, 0.1f);
				__instance.rb.mass = num;
			}
			else if (!__instance.grabbed && __instance.massOriginal > 0f)
			{
				__instance.rb.mass = __instance.massOriginal;
			}
		}
		catch
		{
		}
	}
}