Decompiled source of cancanneed v0.1.3

plugins/awyeh.cancanneed.dll

Decompiled 3 days ago
using System;
using System.Collections;
using System.ComponentModel;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using Peak.Afflictions;
using TMPro;
using UnityEngine;
using UnityEngine.SceneManagement;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("awyeh.cancanneed")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("0.1.3.0")]
[assembly: AssemblyInformationalVersion("0.1.3+b86a49fcaf90158d9c5c03863fd57695c86e9fc4")]
[assembly: AssemblyProduct("awyeh.cancanneed")]
[assembly: AssemblyTitle("cancanneed")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.1.3.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace PeakTest
{
	[BepInPlugin("awyeh.cancanneed", "cancanneed", "0.1.0")]
	public class Plugin : BaseUnityPlugin
	{
		private ConfigEntry<KeyCode> _triggerKey;

		private ConfigEntry<float> _holdDuration;

		private ConfigEntry<float> _cooldownDuration;

		private ConfigEntry<float> _cooldownMessageTime;

		private ConfigEntry<string> _cooldownMessageText;

		private ConfigEntry<float> _hungerDelta;

		private ConfigEntry<float> _injuryDelta;

		private ConfigEntry<float> _sporesDelta;

		private ConfigEntry<float> _poisonDelta;

		private ConfigEntry<float> _drowsyDelta;

		private ConfigEntry<float> _numbDuration;

		private ConfigEntry<string> _itemName;

		private float _holdTimer;

		private float _lastSpawnTime = -999f;

		private float _cooldownMessageTimer;

		private bool _cooldownMessageActive;

		private bool _completed;

		private bool _ready;

		private string _currentScene = "";

		private UI_UseItemProgress? _uiProgress;

		internal static ManualLogSource Log { get; private set; }

		private void Awake()
		{
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Expected O, but got Unknown
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: Expected O, but got Unknown
			//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Expected O, but got Unknown
			//IL_013b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0145: Expected O, but got Unknown
			//IL_0179: Unknown result type (might be due to invalid IL or missing references)
			//IL_0183: Expected O, but got Unknown
			//IL_01b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c1: Expected O, but got Unknown
			//IL_01f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ff: Expected O, but got Unknown
			//IL_0233: Unknown result type (might be due to invalid IL or missing references)
			//IL_023d: Expected O, but got Unknown
			//IL_0271: Unknown result type (might be due to invalid IL or missing references)
			//IL_027b: Expected O, but got Unknown
			Log = ((BaseUnityPlugin)this).Logger;
			_triggerKey = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("按键", "触发按键", (KeyCode)99, "按住此按键触发模组");
			_holdDuration = ((BaseUnityPlugin)this).Config.Bind<float>("数值", "按住时长", 2f, new ConfigDescription("按住多少秒后触发", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 10f), Array.Empty<object>()));
			_cooldownDuration = ((BaseUnityPlugin)this).Config.Bind<float>("数值", "冷却时长", 600f, new ConfigDescription("两次触发之间的冷却时间(秒)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 3600f), Array.Empty<object>()));
			_cooldownMessageTime = ((BaseUnityPlugin)this).Config.Bind<float>("数值", "冷却提示时长", 1.5f, new ConfigDescription("冷却提示显示多少秒", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.5f, 10f), Array.Empty<object>()));
			_cooldownMessageText = ((BaseUnityPlugin)this).Config.Bind<string>("文字", "冷却提示文字", "刚打过,休息一下好不好", "冷却中显示的提示文字");
			_hungerDelta = ((BaseUnityPlugin)this).Config.Bind<float>("效果", "饥饿变化", 0.1f, new ConfigDescription("饥饿值变化(正=恢复)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(-1f, 1f), Array.Empty<object>()));
			_injuryDelta = ((BaseUnityPlugin)this).Config.Bind<float>("效果", "受伤变化", 0.025f, new ConfigDescription("受伤值变化(正=恢复)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(-1f, 1f), Array.Empty<object>()));
			_sporesDelta = ((BaseUnityPlugin)this).Config.Bind<float>("效果", "孢子变化", 0.05f, new ConfigDescription("孢子值变化(正=恢复)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(-1f, 1f), Array.Empty<object>()));
			_poisonDelta = ((BaseUnityPlugin)this).Config.Bind<float>("效果", "中毒变化", -0.2f, new ConfigDescription("中毒值变化(正=恢复)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(-1f, 1f), Array.Empty<object>()));
			_drowsyDelta = ((BaseUnityPlugin)this).Config.Bind<float>("效果", "眩晕变化", 0.1f, new ConfigDescription("眩晕值变化(正=恢复)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(-1f, 1f), Array.Empty<object>()));
			_numbDuration = ((BaseUnityPlugin)this).Config.Bind<float>("效果", "麻木时长", 5f, new ConfigDescription("麻木效果持续秒数", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 30f), Array.Empty<object>()));
			_itemName = ((BaseUnityPlugin)this).Config.Bind<string>("效果", "生成物品名", "FortifiedMilk", "生成的物品名称");
			Log.LogInfo((object)"cancanneed Awake");
			((MonoBehaviour)this).StartCoroutine(Init());
		}

		private IEnumerator Init()
		{
			while ((Object)(object)Character.localCharacter == (Object)null)
			{
				yield return (object)new WaitForSeconds(1f);
			}
			_ready = true;
			Log.LogInfo((object)$"=== SYSTEM READY — Hold {_triggerKey.Value} for {_holdDuration.Value}s! ===");
		}

		private void Update()
		{
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: 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)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			if (!_ready)
			{
				return;
			}
			if ((Object)(object)_uiProgress == (Object)null)
			{
				_uiProgress = Object.FindAnyObjectByType<UI_UseItemProgress>();
			}
			Scene activeScene = SceneManager.GetActiveScene();
			if (((Scene)(ref activeScene)).name != _currentScene)
			{
				activeScene = SceneManager.GetActiveScene();
				_currentScene = ((Scene)(ref activeScene)).name;
				_lastSpawnTime = -999f;
			}
			if (IsInvincible())
			{
				_holdTimer = 0f;
				_completed = false;
			}
			else if (Input.GetKey(_triggerKey.Value))
			{
				if (Time.time - _lastSpawnTime < _cooldownDuration.Value)
				{
					_holdTimer = 0f;
					_completed = false;
					_cooldownMessageTimer = _cooldownMessageTime.Value;
					return;
				}
				_holdTimer += Time.deltaTime;
				if (!_completed && _holdTimer >= _holdDuration.Value)
				{
					_completed = true;
					_holdTimer = 0f;
					_lastSpawnTime = Time.time;
					SpawnFortifiedMilk();
				}
			}
			else
			{
				_holdTimer = 0f;
				_completed = false;
			}
		}

		private void LateUpdate()
		{
			if (_ready && !((Object)(object)_uiProgress == (Object)null))
			{
				if (_cooldownMessageTimer > 0f)
				{
					_cooldownMessageTimer -= Time.deltaTime;
					_cooldownMessageActive = true;
					GUIManager instance = GUIManager.instance;
					instance.interactName.SetActive(true);
					((TMP_Text)instance.interactNameText).text = _cooldownMessageText.Value;
				}
				else if (_cooldownMessageActive)
				{
					_cooldownMessageActive = false;
					GUIManager.instance.interactName.SetActive(false);
				}
				if (_holdTimer > 0f)
				{
					float fillAmount = Mathf.Clamp01(_holdTimer / _holdDuration.Value);
					_uiProgress.fill.fillAmount = fillAmount;
					((Behaviour)_uiProgress.fill).enabled = true;
					((Behaviour)_uiProgress.empty).enabled = true;
				}
			}
		}

		private void SpawnFortifiedMilk()
		{
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ed: Expected O, but got Unknown
			Character localCharacter = Character.localCharacter;
			if ((Object)(object)localCharacter == (Object)null)
			{
				return;
			}
			CharacterAfflictions afflictions = localCharacter.refs.afflictions;
			afflictions.SetStatus((STATUSTYPE)1, afflictions.GetCurrentStatus((STATUSTYPE)1) + _hungerDelta.Value, true);
			afflictions.SetStatus((STATUSTYPE)0, afflictions.GetCurrentStatus((STATUSTYPE)0) + _injuryDelta.Value, true);
			afflictions.SetStatus((STATUSTYPE)10, afflictions.GetCurrentStatus((STATUSTYPE)10) + _sporesDelta.Value, true);
			afflictions.SetStatus((STATUSTYPE)3, afflictions.GetCurrentStatus((STATUSTYPE)3) + _poisonDelta.Value, true);
			afflictions.SetStatus((STATUSTYPE)6, afflictions.GetCurrentStatus((STATUSTYPE)6) + _drowsyDelta.Value, true);
			Log.LogInfo((object)"Status effects applied locally!");
			if (_numbDuration.Value > 0f)
			{
				localCharacter.refs.afflictions.AddAffliction((Affliction)new Affliction_Numb
				{
					totalTime = _numbDuration.Value
				}, false);
			}
			try
			{
				localCharacter.refs.items.SpawnItemInHand(_itemName.Value);
				Log.LogInfo((object)(_itemName.Value + " spawned in hand!"));
			}
			catch (Exception ex)
			{
				Log.LogError((object)("Spawn failed: " + ex.Message));
			}
		}

		private static bool IsInvincible()
		{
			Character localCharacter = Character.localCharacter;
			if ((Object)(object)localCharacter != (Object)null)
			{
				if (!localCharacter.data.isInvincible)
				{
					return localCharacter.data.isInvincibleMilk;
				}
				return true;
			}
			return false;
		}

		private void OnDestroy()
		{
			Harmony.UnpatchID("awyeh.cancanneed");
		}
	}
}
namespace System.Diagnostics.CodeAnalysis
{
	[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class ConstantExpectedAttribute : Attribute
	{
		public object? Min { get; set; }

		public object? Max { get; set; }
	}
	[AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Module | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Interface | AttributeTargets.Delegate, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class ExperimentalAttribute : Attribute
	{
		public string DiagnosticId { get; }

		public string? UrlFormat { get; set; }

		public ExperimentalAttribute(string diagnosticId)
		{
			DiagnosticId = diagnosticId;
		}
	}
	[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)]
	[ExcludeFromCodeCoverage]
	internal sealed class MemberNotNullAttribute : Attribute
	{
		public string[] Members { get; }

		public MemberNotNullAttribute(string member)
		{
			Members = new string[1] { member };
		}

		public MemberNotNullAttribute(params string[] members)
		{
			Members = members;
		}
	}
	[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)]
	[ExcludeFromCodeCoverage]
	internal sealed class MemberNotNullWhenAttribute : Attribute
	{
		public bool ReturnValue { get; }

		public string[] Members { get; }

		public MemberNotNullWhenAttribute(bool returnValue, string member)
		{
			ReturnValue = returnValue;
			Members = new string[1] { member };
		}

		public MemberNotNullWhenAttribute(bool returnValue, params string[] members)
		{
			ReturnValue = returnValue;
			Members = members;
		}
	}
	[AttributeUsage(AttributeTargets.Constructor, AllowMultiple = false, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class SetsRequiredMembersAttribute : Attribute
	{
	}
	[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class StringSyntaxAttribute : Attribute
	{
		public const string CompositeFormat = "CompositeFormat";

		public const string DateOnlyFormat = "DateOnlyFormat";

		public const string DateTimeFormat = "DateTimeFormat";

		public const string EnumFormat = "EnumFormat";

		public const string GuidFormat = "GuidFormat";

		public const string Json = "Json";

		public const string NumericFormat = "NumericFormat";

		public const string Regex = "Regex";

		public const string TimeOnlyFormat = "TimeOnlyFormat";

		public const string TimeSpanFormat = "TimeSpanFormat";

		public const string Uri = "Uri";

		public const string Xml = "Xml";

		public string Syntax { get; }

		public object?[] Arguments { get; }

		public StringSyntaxAttribute(string syntax)
		{
			Syntax = syntax;
			Arguments = new object[0];
		}

		public StringSyntaxAttribute(string syntax, params object?[] arguments)
		{
			Syntax = syntax;
			Arguments = arguments;
		}
	}
	[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class UnscopedRefAttribute : Attribute
	{
	}
}
namespace System.Runtime.Versioning
{
	[AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Module | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Interface | AttributeTargets.Delegate, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class RequiresPreviewFeaturesAttribute : Attribute
	{
		public string? Message { get; }

		public string? Url { get; set; }

		public RequiresPreviewFeaturesAttribute()
		{
		}

		public RequiresPreviewFeaturesAttribute(string? message)
		{
			Message = message;
		}
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
	internal sealed class IgnoresAccessChecksToAttribute : Attribute
	{
		public IgnoresAccessChecksToAttribute(string assemblyName)
		{
		}
	}
	[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class CallerArgumentExpressionAttribute : Attribute
	{
		public string ParameterName { get; }

		public CallerArgumentExpressionAttribute(string parameterName)
		{
			ParameterName = parameterName;
		}
	}
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Interface, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class CollectionBuilderAttribute : Attribute
	{
		public Type BuilderType { get; }

		public string MethodName { get; }

		public CollectionBuilderAttribute(Type builderType, string methodName)
		{
			BuilderType = builderType;
			MethodName = methodName;
		}
	}
	[AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class CompilerFeatureRequiredAttribute : Attribute
	{
		public const string RefStructs = "RefStructs";

		public const string RequiredMembers = "RequiredMembers";

		public string FeatureName { get; }

		public bool IsOptional { get; set; }

		public CompilerFeatureRequiredAttribute(string featureName)
		{
			FeatureName = featureName;
		}
	}
	[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class InterpolatedStringHandlerArgumentAttribute : Attribute
	{
		public string[] Arguments { get; }

		public InterpolatedStringHandlerArgumentAttribute(string argument)
		{
			Arguments = new string[1] { argument };
		}

		public InterpolatedStringHandlerArgumentAttribute(params string[] arguments)
		{
			Arguments = arguments;
		}
	}
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple = false, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class InterpolatedStringHandlerAttribute : Attribute
	{
	}
	[EditorBrowsable(EditorBrowsableState.Never)]
	[ExcludeFromCodeCoverage]
	internal static class IsExternalInit
	{
	}
	[AttributeUsage(AttributeTargets.Method, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class ModuleInitializerAttribute : Attribute
	{
	}
	[AttributeUsage(AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class OverloadResolutionPriorityAttribute : Attribute
	{
		public int Priority { get; }

		public OverloadResolutionPriorityAttribute(int priority)
		{
			Priority = priority;
		}
	}
	[AttributeUsage(AttributeTargets.Parameter, Inherited = true, AllowMultiple = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class ParamCollectionAttribute : Attribute
	{
	}
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class RequiredMemberAttribute : Attribute
	{
	}
	[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
	[EditorBrowsable(EditorBrowsableState.Never)]
	[ExcludeFromCodeCoverage]
	internal sealed class RequiresLocationAttribute : Attribute
	{
	}
	[AttributeUsage(AttributeTargets.Module | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Event | AttributeTargets.Interface, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class SkipLocalsInitAttribute : Attribute
	{
	}
}