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