using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Threading.Tasks;
using BBModMenu;
using HarmonyLib;
using MelonLoader;
using Steamworks;
using Steamworks.Data;
using TopUnlimiter;
using UnityEngine;
using UnityEngine.UIElements;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("TopUnlimiter")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("TopUnlimiter")]
[assembly: AssemblyCopyright("Copyright © 2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: MelonInfo(typeof(Unlimiter), "Top Unlimiter", "1.0.0", "Beton Bros", null)]
[assembly: MelonGame("", "Beton Brutal")]
[assembly: MelonAdditionalDependencies(new string[] { "BBModMenu" })]
[assembly: Guid("b0443f2b-6ae6-4d07-b097-ea87517bf143")]
[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 TopUnlimiter;
public class Unlimiter : MelonMod
{
[HarmonyPatch(typeof(SteamManager), "GetGlobalScores")]
public class GetGlobalScoresPatch
{
[HarmonyPrefix]
private static bool Prefix(ref Task<LeaderboardEntry[]> __result, string leaderboardName)
{
__result = GetGlobalScoresOverride(leaderboardName);
return false;
}
private static async Task<LeaderboardEntry[]> GetGlobalScoresOverride(string leaderboardName)
{
Leaderboard? leaderboard = await SteamUserStats.FindLeaderboardAsync(leaderboardName);
if (!leaderboard.HasValue)
{
return null;
}
Leaderboard value = leaderboard.Value;
return await ((Leaderboard)(ref value)).GetScoresAsync(NbRun, 1);
}
}
[HarmonyPatch(typeof(Flashlight), "Awake")]
public class AddSettings
{
[HarmonyPrefix]
private static void Prefix(Flashlight __instance)
{
((Component)__instance).gameObject.AddComponent<ReplaySettings>();
}
}
public static int NbRun = 100;
}
internal class ReplaySettings : MonoBehaviour
{
public void Start()
{
GameUI component = GameObject.Find("GameUI").GetComponent<GameUI>();
UIScreen? obj = ((typeof(GameUI).GetField("screens", BindingFlags.Instance | BindingFlags.NonPublic)?.GetValue(component) is List<UIScreen> source) ? ((IEnumerable<UIScreen>)source).FirstOrDefault((Func<UIScreen, bool>)((UIScreen screen) => screen is ModMenu)) : null);
ModMenu val = (ModMenu)(object)((obj is ModMenu) ? obj : null);
if (val == null)
{
MelonLogger.Msg("ModMenu not found");
return;
}
string text = "Replay Viewer";
VisualElement val2 = val.AddSetting(text);
VisualElement val3 = val.CreateWrapper();
VisualElement val4 = val.CreateGroup("Number of replay");
Label val5 = val.CreateLabel("Number of replay");
Slider slider = val.CreateSlider(text, "replayNumber", 100f, 2000f, 500f, true);
Action updateNumber = delegate
{
Unlimiter.NbRun = (int)((BaseField<float>)(object)slider).value;
};
INotifyValueChangedExtensions.RegisterValueChangedCallback<float>((INotifyValueChanged<float>)(object)slider, (EventCallback<ChangeEvent<float>>)delegate
{
updateNumber();
});
updateNumber();
val4.Add((VisualElement)(object)val5);
val4.Add((VisualElement)(object)slider);
val3.Add(val4);
val2.Add(val3);
}
}