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.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("DamageRecall")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("DamageRecall")]
[assembly: AssemblyCopyright("Copyright © 2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("7f263ae6-0fe6-4598-a59c-811ba2be2a29")]
[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")]
namespace DamageRecall;
[BepInPlugin("com.low.damagerecall", "Damage Recall", "0.1.1")]
public class DamageRecallPlugin : BaseUnityPlugin
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static UnityAction <>9__10_0;
internal void <CreatePopup>b__10_0()
{
popupRoot.SetActive(false);
}
}
[CompilerGenerated]
private sealed class <ExecuteAfterDelay>d__9 : IEnumerator<object>, IDisposable, IEnumerator
{
private int <>1__state;
private object <>2__current;
public DamageRecallPlugin <>4__this;
private GameObject <target>5__2;
private GameObject <initCheck>5__3;
private float <timeout>5__4;
private float <elapsed>5__5;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <ExecuteAfterDelay>d__9(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<target>5__2 = null;
<initCheck>5__3 = null;
<>1__state = -2;
}
private bool MoveNext()
{
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
//IL_0084: Expected O, but got Unknown
int num = <>1__state;
DamageRecallPlugin damageRecallPlugin = <>4__this;
switch (num)
{
default:
return false;
case 0:
<>1__state = -1;
<target>5__2 = null;
<initCheck>5__3 = null;
<timeout>5__4 = 5f;
<elapsed>5__5 = 0f;
break;
case 1:
<>1__state = -1;
break;
}
if ((Object)(object)<initCheck>5__3 == (Object)null && <elapsed>5__5 < <timeout>5__4)
{
<initCheck>5__3 = GameObject.Find("TavernMaster/Canvas/Plate/Statistics/DamageMeterContainer/DamageMeter/ViewPort/Content/Prototype(Clone)");
if (!((Object)(object)<target>5__2 != (Object)null))
{
<elapsed>5__5 += 0.2f;
<>2__current = (object)new WaitForSeconds(0.2f);
<>1__state = 1;
return true;
}
}
if ((Object)(object)<initCheck>5__3 == (Object)null)
{
((BaseUnityPlugin)damageRecallPlugin).Logger.LogError((object)"DamageMeter not found after waiting — cannot copy.");
return false;
}
((BaseUnityPlugin)damageRecallPlugin).Logger.LogInfo((object)"DamageMeter found — creating persistent copy.");
<target>5__2 = GameObject.Find("TavernMaster/Canvas/Plate/Statistics/DamageMeterContainer/DamageMeter");
damageRecallPlugin.CopyDamageMeter(<target>5__2);
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();
}
}
private static GameObject popupRoot;
private GameObject persistentDamageMeter;
private bool isVisible;
private void EnsureHideManagerGameObjectDisabled()
{
try
{
string path = Path.Combine(Paths.ConfigPath, "BepInEx.cfg");
if (!File.Exists(path))
{
((BaseUnityPlugin)this).Logger.LogWarning((object)"BepInEx.cfg not found — cannot verify HideManagerGameObject.");
return;
}
string[] array = File.ReadAllLines(path);
bool flag = false;
for (int i = 0; i < array.Length; i++)
{
if (array[i].Trim().StartsWith("HideManagerGameObject") && !array[i].Contains("true"))
{
array[i] = "HideManagerGameObject = true";
flag = true;
}
}
if (flag)
{
File.WriteAllLines(path, array);
((BaseUnityPlugin)this).Logger.LogInfo((object)"Patched BepInEx.cfg → HideManagerGameObject = true");
}
else
{
((BaseUnityPlugin)this).Logger.LogInfo((object)"HideManagerGameObject already set to true.");
}
}
catch (Exception arg)
{
((BaseUnityPlugin)this).Logger.LogError((object)$"Failed to update BepInEx.cfg: {arg}");
}
}
private void Awake()
{
EnsureHideManagerGameObjectDisabled();
((BaseUnityPlugin)this).Logger.LogInfo((object)"Damage Recall loaded.");
SceneManager.sceneLoaded += OnSceneLoaded;
SceneManager.sceneUnloaded += OnSceneUnloaded;
}
private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
switch (((Scene)(ref scene)).name)
{
case "GameScene":
persistentDamageMeter = GameObject.Find("PersistedDamageMeter");
if ((Object)(object)persistentDamageMeter != (Object)null)
{
persistentDamageMeter.SetActive(false);
GameObject val = GameObject.Find("Canvas");
if ((Object)(object)val != (Object)null)
{
persistentDamageMeter.transform.SetParent(val.transform, false);
((BaseUnityPlugin)this).Logger.LogInfo((object)"Reattached PersistedDamageMeter to GameScene Canvas.");
}
}
break;
case "HumanTavernScene":
((MonoBehaviour)this).StartCoroutine(ExecuteAfterDelay());
break;
case "TitleScene":
CreatePopup();
break;
}
}
private void OnSceneUnloaded(Scene scene)
{
if (((Scene)(ref scene)).name == "GameScene")
{
persistentDamageMeter = GameObject.Find("PersistedDamageMeter");
if ((Object)(object)persistentDamageMeter != (Object)null)
{
persistentDamageMeter.SetActive(false);
Object.Destroy((Object)(object)persistentDamageMeter);
}
}
}
private void Update()
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
if (!Input.GetKeyDown((KeyCode)96))
{
return;
}
Scene activeScene = SceneManager.GetActiveScene();
if (((Scene)(ref activeScene)).name == "GameScene")
{
if ((Object)(object)persistentDamageMeter == (Object)null)
{
((BaseUnityPlugin)this).Logger.LogInfo((object)"No persisted damage meter found");
return;
}
isVisible = !isVisible;
persistentDamageMeter.SetActive(isVisible);
((BaseUnityPlugin)this).Logger.LogInfo((object)$"PersistedDamageMeter visibility toggled: {isVisible}");
}
}
private void CopyDamageMeter(GameObject sourceMeter)
{
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: 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_003d: Unknown result type (might be due to invalid IL or missing references)
GameObject val = Object.Instantiate<GameObject>(sourceMeter);
((Object)val).name = "PersistedDamageMeter";
val.transform.position = new Vector3(-440f, -320f, 0f);
Scene sceneByName = SceneManager.GetSceneByName("PersistentScene");
SceneManager.MoveGameObjectToScene(val, sceneByName);
persistentDamageMeter = val;
}
[IteratorStateMachine(typeof(<ExecuteAfterDelay>d__9))]
private IEnumerator ExecuteAfterDelay()
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <ExecuteAfterDelay>d__9(0)
{
<>4__this = this
};
}
private void CreatePopup()
{
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Expected O, but got Unknown
//IL_0082: Unknown result type (might be due to invalid IL or missing references)
//IL_008c: 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_00c3: Unknown result type (might be due to invalid IL or missing references)
//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
//IL_00de: Unknown result type (might be due to invalid IL or missing references)
//IL_0106: Unknown result type (might be due to invalid IL or missing references)
//IL_0120: Unknown result type (might be due to invalid IL or missing references)
//IL_0134: Unknown result type (might be due to invalid IL or missing references)
//IL_0143: Unknown result type (might be due to invalid IL or missing references)
//IL_0149: Expected O, but got Unknown
//IL_0179: Unknown result type (might be due to invalid IL or missing references)
//IL_01c4: Unknown result type (might be due to invalid IL or missing references)
//IL_01d9: Unknown result type (might be due to invalid IL or missing references)
//IL_01e8: Unknown result type (might be due to invalid IL or missing references)
//IL_01ed: Unknown result type (might be due to invalid IL or missing references)
//IL_01ff: Unknown result type (might be due to invalid IL or missing references)
//IL_0227: Unknown result type (might be due to invalid IL or missing references)
//IL_0237: Unknown result type (might be due to invalid IL or missing references)
//IL_01a2: Unknown result type (might be due to invalid IL or missing references)
//IL_01a7: Unknown result type (might be due to invalid IL or missing references)
//IL_01ad: Expected O, but got Unknown
GameObject val = GameObject.Find("Canvas");
if (!Object.op_Implicit((Object)(object)val))
{
((BaseUnityPlugin)this).Logger.LogWarning((object)"Canvas not found in scene!");
return;
}
if ((Object)(object)popupRoot != (Object)null)
{
popupRoot.transform.SetParent(val.transform, false);
return;
}
popupRoot = new GameObject("ModPopup");
popupRoot.transform.SetParent(val.transform, false);
RectTransform obj = popupRoot.AddComponent<RectTransform>();
obj.sizeDelta = new Vector2(400f, 200f);
obj.anchoredPosition = Vector2.zero;
((Graphic)popupRoot.AddComponent<Image>()).color = new Color(0f, 0f, 0f, 0.75f);
GameObject val2 = new GameObject("PopupText");
val2.transform.SetParent(popupRoot.transform, false);
Text obj2 = val2.AddComponent<Text>();
obj2.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
obj2.text = "Damage Recall loaded.\n\nDamage from previous played day can now be opened and closed using the ~ key.";
obj2.alignment = (TextAnchor)4;
((Graphic)obj2).color = Color.white;
RectTransform component = val2.GetComponent<RectTransform>();
component.sizeDelta = new Vector2(380f, 120f);
component.anchoredPosition = new Vector2(0f, 40f);
GameObject val3 = new GameObject("CloseButton");
val3.transform.SetParent(popupRoot.transform, false);
((Graphic)val3.AddComponent<Image>()).color = new Color(0.8f, 0.2f, 0.2f, 1f);
ButtonClickedEvent onClick = val3.AddComponent<Button>().onClick;
object obj3 = <>c.<>9__10_0;
if (obj3 == null)
{
UnityAction val4 = delegate
{
popupRoot.SetActive(false);
};
<>c.<>9__10_0 = val4;
obj3 = (object)val4;
}
((UnityEvent)onClick).AddListener((UnityAction)obj3);
RectTransform component2 = val3.GetComponent<RectTransform>();
component2.sizeDelta = new Vector2(120f, 40f);
component2.anchoredPosition = new Vector2(0f, -60f);
GameObject val5 = new GameObject("ButtonText");
val5.transform.SetParent(val3.transform, false);
Text obj4 = val5.AddComponent<Text>();
obj4.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
obj4.text = "Close";
obj4.alignment = (TextAnchor)4;
((Graphic)obj4).color = Color.white;
val5.GetComponent<RectTransform>().sizeDelta = component2.sizeDelta;
}
}