using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
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 Microsoft.CodeAnalysis;
using On.RoR2;
using On.RoR2.UI;
using RiskOfOptions;
using RiskOfOptions.OptionConfigs;
using RiskOfOptions.Options;
using RoR2;
using RoR2.UI;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("MeditateReminder")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("MeditateReminder")]
[assembly: AssemblyTitle("MeditateReminder")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.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.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace MeditateReminder
{
internal static class Log
{
private static ManualLogSource _logSource;
internal static void Init(ManualLogSource logSource)
{
_logSource = logSource;
}
internal static void Debug(object data)
{
_logSource.LogDebug(data);
}
internal static void Error(object data)
{
_logSource.LogError(data);
}
internal static void Fatal(object data)
{
_logSource.LogFatal(data);
}
internal static void Info(object data)
{
_logSource.LogInfo(data);
}
internal static void Message(object data)
{
_logSource.LogMessage(data);
}
internal static void Warning(object data)
{
_logSource.LogWarning(data);
}
}
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("Birbski.MeditateReminder", "MeditateReminder", "1.0.0")]
public class MeditateReminder : BaseUnityPlugin
{
[CompilerGenerated]
private sealed class <<SendMessage>g__ShowMessage|44_0>d : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public MeditateReminder <>4__this;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <<SendMessage>g__ShowMessage|44_0>d(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Expected O, but got Unknown
int num = <>1__state;
MeditateReminder meditateReminder = <>4__this;
switch (num)
{
default:
return false;
case 0:
<>1__state = -1;
meditateReminder.goReminder.SetActive(true);
<>2__current = (object)new WaitForSeconds(revealTime.Value);
<>1__state = 1;
return true;
case 1:
<>1__state = -1;
meditateReminder.goReminder.SetActive(false);
return false;
}
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
public const string PluginGUID = "Birbski.MeditateReminder";
public const string PluginAuthor = "Birbski";
public const string PluginName = "MeditateReminder";
public const string PluginVersion = "1.0.0";
private const float placementMin = 0.01f;
private const float placementMax = 1f;
private const int fontSizeMin = 8;
private const int fontSizeMax = 96;
private const float timerMin = 1f;
private const float timerMax = 5f;
private TextMeshProUGUI reminderText;
private GameObject goReminder;
private BodyIndex seekerBodyIndex;
private float prevCd;
public static ConfigEntry<bool> useChat { get; set; }
public static ConfigEntry<float> xPlacement { get; set; }
public static ConfigEntry<float> yPlacement { get; set; }
public static ConfigEntry<int> fontSize { get; set; }
public static ConfigEntry<Color> fontColor { get; set; }
public static ConfigEntry<float> revealTime { get; set; }
public void Awake()
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: 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)
//IL_0111: Unknown result type (might be due to invalid IL or missing references)
//IL_011b: Expected O, but got Unknown
//IL_0120: Unknown result type (might be due to invalid IL or missing references)
//IL_0125: Unknown result type (might be due to invalid IL or missing references)
//IL_0130: Unknown result type (might be due to invalid IL or missing references)
//IL_013b: Unknown result type (might be due to invalid IL or missing references)
//IL_0146: Unknown result type (might be due to invalid IL or missing references)
//IL_0151: Unknown result type (might be due to invalid IL or missing references)
//IL_0159: Unknown result type (might be due to invalid IL or missing references)
//IL_0163: Expected O, but got Unknown
//IL_0168: Expected O, but got Unknown
//IL_0163: Unknown result type (might be due to invalid IL or missing references)
//IL_016d: Expected O, but got Unknown
//IL_0172: Unknown result type (might be due to invalid IL or missing references)
//IL_0177: Unknown result type (might be due to invalid IL or missing references)
//IL_0182: Unknown result type (might be due to invalid IL or missing references)
//IL_018d: Unknown result type (might be due to invalid IL or missing references)
//IL_0198: Unknown result type (might be due to invalid IL or missing references)
//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
//IL_01b5: Expected O, but got Unknown
//IL_01ba: Expected O, but got Unknown
//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
//IL_01bf: Expected O, but got Unknown
//IL_01c4: Unknown result type (might be due to invalid IL or missing references)
//IL_01c9: Unknown result type (might be due to invalid IL or missing references)
//IL_01d0: Unknown result type (might be due to invalid IL or missing references)
//IL_01d8: Unknown result type (might be due to invalid IL or missing references)
//IL_01e0: Unknown result type (might be due to invalid IL or missing references)
//IL_01ea: Expected O, but got Unknown
//IL_01ef: Expected O, but got Unknown
//IL_01ea: Unknown result type (might be due to invalid IL or missing references)
//IL_01f4: Expected O, but got Unknown
//IL_01f9: Unknown result type (might be due to invalid IL or missing references)
//IL_01fe: Unknown result type (might be due to invalid IL or missing references)
//IL_0206: Unknown result type (might be due to invalid IL or missing references)
//IL_0210: Expected O, but got Unknown
//IL_0215: Expected O, but got Unknown
//IL_0210: Unknown result type (might be due to invalid IL or missing references)
//IL_021a: Expected O, but got Unknown
//IL_021f: Unknown result type (might be due to invalid IL or missing references)
//IL_0224: Unknown result type (might be due to invalid IL or missing references)
//IL_022f: Unknown result type (might be due to invalid IL or missing references)
//IL_023a: Unknown result type (might be due to invalid IL or missing references)
//IL_0245: Unknown result type (might be due to invalid IL or missing references)
//IL_0250: Unknown result type (might be due to invalid IL or missing references)
//IL_0258: Unknown result type (might be due to invalid IL or missing references)
//IL_0262: Expected O, but got Unknown
//IL_0267: Expected O, but got Unknown
//IL_0262: Unknown result type (might be due to invalid IL or missing references)
//IL_026c: Expected O, but got Unknown
//IL_0273: Unknown result type (might be due to invalid IL or missing references)
//IL_027d: Expected O, but got Unknown
//IL_0284: Unknown result type (might be due to invalid IL or missing references)
//IL_028e: Expected O, but got Unknown
//IL_0295: Unknown result type (might be due to invalid IL or missing references)
//IL_029f: Expected O, but got Unknown
Log.Init(((BaseUnityPlugin)this).Logger);
seekerBodyIndex = BodyCatalog.FindBodyIndex("SeekerBody");
useChat = ((BaseUnityPlugin)this).Config.Bind<bool>("-", "SendInChat", false, "Show reminder in chat rather than on screen");
xPlacement = ((BaseUnityPlugin)this).Config.Bind<float>("-", "XPlacement", 0.4f, "Placement of reminder text on X Axis (0 - 1.0)");
yPlacement = ((BaseUnityPlugin)this).Config.Bind<float>("-", "YPlacement", 0.4f, "Placement of reminder text on Y Axis (0 - 1.0)");
fontSize = ((BaseUnityPlugin)this).Config.Bind<int>("-", "FontSize", 28, "Size of reminder text");
fontColor = ((BaseUnityPlugin)this).Config.Bind<Color>("-", "FontColor", Color.cyan, "Color of reminder text");
revealTime = ((BaseUnityPlugin)this).Config.Bind<float>("-", "RevealTime", 3f, "How many seconds the reminder text is on screen");
Sprite val = LoadSprite();
if ((Object)(object)val != (Object)null)
{
ModSettingsManager.SetModIcon(val);
}
ModSettingsManager.SetModDescription("A reminder for those of us who can't be bothered to look and see if Meditate is off of cooldown or not");
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(useChat));
ModSettingsManager.AddOption((BaseOption)new SliderOption(xPlacement, (SliderConfig)new StepSliderConfig
{
min = 0.01f,
max = 1f,
increment = 0.01f,
FormatString = "{0:0.0}",
checkIfDisabled = new IsDisabledDelegate(CheckToEnableOptions)
}));
ModSettingsManager.AddOption((BaseOption)new SliderOption(yPlacement, (SliderConfig)new StepSliderConfig
{
min = 0.01f,
max = 1f,
increment = 0.01f,
FormatString = "{0:0.0}",
checkIfDisabled = new IsDisabledDelegate(CheckToEnableOptions)
}));
ModSettingsManager.AddOption((BaseOption)new IntSliderOption(fontSize, new IntSliderConfig
{
min = 8,
max = 96,
checkIfDisabled = new IsDisabledDelegate(CheckToEnableOptions)
}));
ModSettingsManager.AddOption((BaseOption)new ColorOption(fontColor, new ColorOptionConfig
{
checkIfDisabled = new IsDisabledDelegate(CheckToEnableOptions)
}));
ModSettingsManager.AddOption((BaseOption)new SliderOption(revealTime, (SliderConfig)new StepSliderConfig
{
min = 1f,
max = 5f,
increment = 1f,
FormatString = "{0:0}",
checkIfDisabled = new IsDisabledDelegate(CheckToEnableOptions)
}));
CharacterBody.FixedUpdate += new hook_FixedUpdate(CharacterBody_FixedUpdate);
CharacterBody.OnDestroy += new hook_OnDestroy(CharacterBody_OnDestroy);
HUD.Awake += new hook_Awake(HUD_Awake);
}
private void OnDestroy()
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Expected O, but got Unknown
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Expected O, but got Unknown
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Expected O, but got Unknown
CharacterBody.FixedUpdate -= new hook_FixedUpdate(CharacterBody_FixedUpdate);
CharacterBody.OnDestroy -= new hook_OnDestroy(CharacterBody_OnDestroy);
HUD.Awake -= new hook_Awake(HUD_Awake);
}
private void CharacterBody_OnDestroy(orig_OnDestroy orig, CharacterBody self)
{
prevCd = 0f;
orig.Invoke(self);
}
private bool CheckToEnableOptions()
{
return useChat.Value;
}
private void CharacterBody_FixedUpdate(orig_FixedUpdate orig, CharacterBody self)
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Invalid comparison between Unknown and I4
//IL_0021: 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_0016: 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)
orig.Invoke(self);
if ((int)seekerBodyIndex == -1)
{
seekerBodyIndex = BodyCatalog.FindBodyIndex("SeekerBody");
}
if (self.bodyIndex != seekerBodyIndex || (Object)(object)self.master == (Object)null || !self.master.hasEffectiveAuthority)
{
return;
}
SkillLocator skillLocator = self.skillLocator;
if ((Object)(object)skillLocator == (Object)null)
{
return;
}
GenericSkill special = skillLocator.special;
if (!((Object)(object)special == (Object)null))
{
((Object)((Component)self).gameObject).GetInstanceID();
float cooldownRemaining = special.cooldownRemaining;
if (prevCd > 0f && cooldownRemaining <= 0f && self.GetBuffCount(Buffs.ChakraBuff) < 7)
{
SendMessage();
}
prevCd = cooldownRemaining;
}
}
private void HUD_Awake(orig_Awake orig, HUD self)
{
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Expected O, but got Unknown
//IL_0064: Unknown result type (might be due to invalid IL or missing references)
//IL_009e: Unknown result type (might be due to invalid IL or missing references)
//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
orig.Invoke(self);
goReminder = new GameObject("MeditateReminderText");
goReminder.transform.SetParent(self.mainUIPanel.transform);
reminderText = goReminder.AddComponent<TextMeshProUGUI>();
((TMP_Text)reminderText).fontSize = fontSize.Value;
((Graphic)reminderText).color = fontColor.Value;
((TMP_Text)reminderText).text = "Refresh meditate!";
RectTransform rectTransform = ((TMP_Text)reminderText).rectTransform;
rectTransform.anchorMin = new Vector2(xPlacement.Value, yPlacement.Value);
rectTransform.anchorMax = new Vector2(xPlacement.Value, yPlacement.Value);
rectTransform.anchoredPosition = Vector2.zero;
goReminder.SetActive(false);
}
private void SendMessage()
{
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_0097: Unknown result type (might be due to invalid IL or missing references)
//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
if (useChat.Value)
{
Chat.AddMessage("<color=yellow>Refresh meditate!</color>");
}
else if (Object.op_Implicit((Object)(object)goReminder))
{
CheckLimits();
((TMP_Text)reminderText).fontSize = fontSize.Value;
((Graphic)reminderText).color = fontColor.Value;
RectTransform rectTransform = ((TMP_Text)reminderText).rectTransform;
rectTransform.anchorMin = new Vector2(xPlacement.Value, yPlacement.Value);
rectTransform.anchorMax = new Vector2(xPlacement.Value, yPlacement.Value);
rectTransform.anchoredPosition = Vector2.zero;
((MonoBehaviour)this).StartCoroutine(ShowMessage());
}
[IteratorStateMachine(typeof(<<SendMessage>g__ShowMessage|44_0>d))]
IEnumerator ShowMessage()
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <<SendMessage>g__ShowMessage|44_0>d(0)
{
<>4__this = this
};
}
}
private void CheckLimits()
{
if (xPlacement.Value < 0.01f)
{
xPlacement.Value = 0.01f;
}
if (xPlacement.Value > 1f)
{
xPlacement.Value = 1f;
}
if (yPlacement.Value < 0.01f)
{
yPlacement.Value = 0.01f;
}
if (yPlacement.Value > 1f)
{
yPlacement.Value = 1f;
}
if (((TMP_Text)reminderText).fontSize < 8f)
{
((TMP_Text)reminderText).fontSize = 8f;
}
if (((TMP_Text)reminderText).fontSize > 96f)
{
((TMP_Text)reminderText).fontSize = 96f;
}
if (revealTime.Value < 1f)
{
revealTime.Value = 1f;
}
if (revealTime.Value > 5f)
{
revealTime.Value = 5f;
}
}
private Sprite LoadSprite()
{
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Expected O, but got Unknown
//IL_0072: Unknown result type (might be due to invalid IL or missing references)
//IL_0081: Unknown result type (might be due to invalid IL or missing references)
string path = Paths.PluginPath + "\\Birbski-MeditateReminder\\icon.png";
if (!File.Exists(path))
{
Log.Error("Logo File does not exist");
return null;
}
byte[] array = File.ReadAllBytes(path);
Texture2D val = new Texture2D(256, 256, (TextureFormat)5, false);
if (!ImageConversion.LoadImage(val, array))
{
Log.Error("Texture load error");
return null;
}
((Texture)val).filterMode = (FilterMode)1;
return Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0.5f, 0.5f), 100f);
}
}
}