From 311a5fa472426b8f9a414746df9b9e22339f17f1 Mon Sep 17 00:00:00 2001 From: Ashleigh Adams Date: Sat, 26 Jul 2025 05:30:02 +0100 Subject: [PATCH 1/3] Added public API for CS2MenuManager for a future compatibility plugin --- CSSUniversalMenuAPI.sln | 6 + .../NotSupported.cs | 730 ++++++++++++++++++ ...UniversalMenu.Compat.CS2MenuManager.csproj | 16 + 3 files changed, 752 insertions(+) create mode 100644 src/UniversalMenu.Compat.CS2MenuManager/NotSupported.cs create mode 100644 src/UniversalMenu.Compat.CS2MenuManager/UniversalMenu.Compat.CS2MenuManager.csproj diff --git a/CSSUniversalMenuAPI.sln b/CSSUniversalMenuAPI.sln index 8f17d2e..fa7030f 100644 --- a/CSSUniversalMenuAPI.sln +++ b/CSSUniversalMenuAPI.sln @@ -44,6 +44,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalMenu.Compat.CSShar EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalMenu.Driver.MenuManagerApi", "src\UniversalMenu.Driver.MenuManagerApi\UniversalMenu.Driver.MenuManagerApi.csproj", "{FB832721-DCE2-4F62-A441-6C3E21A05317}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalMenu.Compat.CS2MenuManager", "src\UniversalMenu.Compat.CS2MenuManager\UniversalMenu.Compat.CS2MenuManager.csproj", "{3A6C4FF8-19C5-3573-83F2-D42C082AFE43}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -82,6 +84,10 @@ Global {FB832721-DCE2-4F62-A441-6C3E21A05317}.Debug|Any CPU.Build.0 = Debug|Any CPU {FB832721-DCE2-4F62-A441-6C3E21A05317}.Release|Any CPU.ActiveCfg = Release|Any CPU {FB832721-DCE2-4F62-A441-6C3E21A05317}.Release|Any CPU.Build.0 = Release|Any CPU + {3A6C4FF8-19C5-3573-83F2-D42C082AFE43}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3A6C4FF8-19C5-3573-83F2-D42C082AFE43}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3A6C4FF8-19C5-3573-83F2-D42C082AFE43}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3A6C4FF8-19C5-3573-83F2-D42C082AFE43}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/UniversalMenu.Compat.CS2MenuManager/NotSupported.cs b/src/UniversalMenu.Compat.CS2MenuManager/NotSupported.cs new file mode 100644 index 0000000..bec38fd --- /dev/null +++ b/src/UniversalMenu.Compat.CS2MenuManager/NotSupported.cs @@ -0,0 +1,730 @@ +using System; +using System.Collections.Generic; +using System.Drawing; + +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Timers; +using CounterStrikeSharp.API.Modules.Utils; + +using CS2MenuManager.API.Class; +using CS2MenuManager.API.Enum; +using CS2MenuManager.API.Interface; + +namespace CS2MenuManager +{ + public static class ProjectInfo + { + public const string Version = "v37"; + public const string Author = "Ashleigh Adams"; + } +} + +namespace CS2MenuManager.API.Class +{ + public abstract class BaseMenu : IMenu + { + public string Title + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public List ItemOptions + { + get => throw new NotImplementedException(); + internal set => throw new NotImplementedException(); + } + public bool ExitButton + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public int MenuTime + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public IMenu? PrevMenu + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public BasePlugin Plugin + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public char ChatMenu_TitleColor + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public char ChatMenu_EnabledColor + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public char ChatMenu_DisabledColor + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public char ChatMenu_PrevPageColor + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public char ChatMenu_NextPageColor + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public char ChatMenu_ExitColor + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public string CenterHtmlMenu_TitleColor + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public string CenterHtmlMenu_EnabledColor + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public string CenterHtmlMenu_DisabledColor + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public string CenterHtmlMenu_PrevPageColor + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public string CenterHtmlMenu_NextPageColor + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public string CenterHtmlMenu_ExitColor + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public bool CenterHtmlMenu_InlinePageOptions + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public int CenterHtmlMenu_MaxTitleLength + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public int CenterHtmlMenu_MaxOptionLength + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public string WasdMenu_TitleColor + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public string WasdMenu_ScrollUpDownKeyColor + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public string WasdMenu_SelectKeyColor + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public string WasdMenu_PrevKeyColor + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public string WasdMenu_ExitKeyColor + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public string WasdMenu_SelectedOptionColor + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public string WasdMenu_OptionColor + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public string WasdMenu_DisabledOptionColor + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public string WasdMenu_ArrowColor + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public bool WasdMenu_FreezePlayer + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public string WasdMenu_ScrollUpKey + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public string WasdMenu_ScrollDownKey + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public string WasdMenu_SelectKey + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public string WasdMenu_PrevKey + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public string WasdMenu_ExitKey + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public Color ScreenMenu_TextColor + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public Color ScreenMenu_DisabledTextColor + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public string ScreenMenu_Font + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public int ScreenMenu_Size + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public bool ScreenMenu_FreezePlayer + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public bool ScreenMenu_ShowResolutionsOption + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public string ScreenMenu_ScrollUpKey + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public string ScreenMenu_ScrollDownKey + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public string ScreenMenu_ExitKey + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public string ScreenMenu_SelectKey + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public MenuType ScreenMenu_MenuType + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + protected BaseMenu(string title, BasePlugin plugin) + { + throw new NotImplementedException(); + } + public virtual ItemOption AddItem(string display, Action onSelect, DisableOption disableOption = DisableOption.None) => throw new NotImplementedException(); + public virtual ItemOption AddItem(string display, DisableOption disableOption) => throw new NotImplementedException(); + public abstract void Display(CCSPlayerController player, int time); + public abstract void DisplayAt(CCSPlayerController player, int firstItem, int time); + public void DisplayToAll(int time) => throw new NotImplementedException(); + public void DisplayAtToAll(int firstItem, int time) => throw new NotImplementedException(); + } + + public abstract class BaseMenuInstance : IMenuInstance, IDisposable + { + public CCSPlayerController Player { get; } + public int Page => throw new NotImplementedException(); + public int CurrentOffset => throw new NotImplementedException(); + public virtual int NumPerPage => throw new NotImplementedException(); + protected virtual int MenuItemsPerPage => throw new NotImplementedException(); + public Stack PrevPageOffsets => throw new NotImplementedException(); + public IMenu Menu { get; } + protected bool HasPrevButton => throw new NotImplementedException(); + protected virtual bool HasNextButton => throw new NotImplementedException(); + protected bool HasExitButton => Menu.ExitButton; + protected BaseMenuInstance(CCSPlayerController player, IMenu menu) + { + Player = player; + Menu = menu; + } + public void NextPage() => throw new NotImplementedException(); + public void PrevPage() => throw new NotImplementedException(); + public virtual void Reset() => throw new NotImplementedException(); + public virtual void Close(bool exitSound) => throw new NotImplementedException(); + public virtual void Display() => throw new NotImplementedException(); + public virtual void OnKeyPress(CCSPlayerController player, int key) => throw new NotImplementedException(); + void IDisposable.Dispose() + { + Dispose(disposing: true); + GC.SuppressFinalize(this); + } + private void Dispose(bool disposing) => throw new NotImplementedException(); + } + + public abstract class BaseVote : IVoteMenu + { + public string Title { get; } + public string Details { get; } + public CCSPlayerController? VoteCaller { get; set; } + public BaseVoteInstance.YesNoVoteResult Result { get; } + public BaseVoteInstance.YesNoVoteHandler? Handler { get; } + public BasePlugin Plugin { get; } + public int VoteTime { get; protected set; } = 20; + + public BaseVote(string title, string details, BaseVoteInstance.YesNoVoteResult resultCallback, BaseVoteInstance.YesNoVoteHandler? handler, BasePlugin plugin) + { + Title = title; + Details = details; + Result = resultCallback; + Handler = handler; + Plugin = plugin; + } + + public abstract void DisplayVoteToAll(int time); + } + + public abstract class BaseVoteInstance : IVoteMenuInstance, IDisposable + { + public delegate void YesNoVoteHandler(YesNoVoteAction action, int param1, CastVote param2); + public delegate bool YesNoVoteResult(YesNoVoteInfo info); + IVoteMenu IVoteMenuInstance.VoteMenu => throw new NotImplementedException(); + public CVoteController VoteController => throw new NotImplementedException(); + public RecipientFilter CurrentVotefilter => throw new NotImplementedException(); + public Timer? Timer { get => throw new NotImplementedException(); protected set => throw new NotImplementedException(); } + public int VoteCount { get => throw new NotImplementedException(); protected set => throw new NotImplementedException(); } + public int VoterCount { get => throw new NotImplementedException(); protected set => throw new NotImplementedException(); } + public int[] Voters { get => throw new NotImplementedException(); protected set => throw new NotImplementedException(); } + protected BaseVoteInstance(List players, IVoteMenu menu) => throw new NotImplementedException(); + public virtual void Close() => throw new NotImplementedException(); + public virtual void Display() => throw new NotImplementedException(); + void IDisposable.Dispose() + { + Dispose(disposing: true); + GC.SuppressFinalize(this); + } + protected virtual void Dispose(bool disposing) => throw new NotImplementedException(); + } + + public static class Buttons + { + public static readonly IReadOnlyDictionary ButtonMapping = new Dictionary + { + ["Alt1"] = (PlayerButtons)16384, + ["Alt2"] = (PlayerButtons)32768, + ["Attack"] = (PlayerButtons)1, + ["Attack2"] = (PlayerButtons)2048, + ["Attack3"] = (PlayerButtons)16777216, + ["Bullrush"] = (PlayerButtons)2097152, + ["Cancel"] = (PlayerButtons)64, + ["Duck"] = (PlayerButtons)4, + ["Grenade1"] = (PlayerButtons)4194304, + ["Grenade2"] = (PlayerButtons)8388608, + ["Space"] = (PlayerButtons)2, + ["Left"] = (PlayerButtons)128, + ["W"] = (PlayerButtons)8, + ["A"] = (PlayerButtons)512, + ["S"] = (PlayerButtons)16, + ["D"] = (PlayerButtons)1024, + ["E"] = (PlayerButtons)32, + ["R"] = (PlayerButtons)8192, + ["F"] = (PlayerButtons)34359738368L, + ["Shift"] = (PlayerButtons)65536, + ["Right"] = (PlayerButtons)256, + ["Run"] = (PlayerButtons)4096, + ["Walk"] = (PlayerButtons)131072, + ["Weapon1"] = (PlayerButtons)524288, + ["Weapon2"] = (PlayerButtons)1048576, + ["Zoom"] = (PlayerButtons)262144, + ["Tab"] = (PlayerButtons)8589934592L, + }; + } + + public class ItemOption + { + public ItemOption(string display, DisableOption option, Action? onSelect) + { + Text = display; + DisableOption = option; + PostSelectAction = PostSelectAction.Nothing; + OnSelect = onSelect; + } + public string Text + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public DisableOption DisableOption + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public PostSelectAction PostSelectAction + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public Action? OnSelect + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + } + + public static class MenuManager + { + public static readonly Dictionary MenuTypesList = new(); + public static IMenuInstance? GetActiveMenu(CCSPlayerController player) => throw new NotImplementedException(); + public static void CloseActiveMenu(CCSPlayerController player) => throw new NotImplementedException(); + public static void OpenMenu(CCSPlayerController player, TMenu menu, int? firstItem, Func createInstance) where TMenu : IMenu => throw new NotImplementedException(); + public static void OnKeyPress(CCSPlayerController player, int key) => throw new NotImplementedException(); + public static T CreateMenu(string title, BasePlugin plugin) where T : BaseMenu => (T)MenuByType(typeof(T), title, plugin); + public static BaseMenu MenuByType(Type menuType, string title, BasePlugin plugin) => throw new NotImplementedException(); + public static BaseMenu MenuByType(string menuType, string title, BasePlugin plugin) => throw new NotImplementedException(); + public static void ReloadConfig() => throw new NotImplementedException(); + } + + public static class MenuTypeManager + { + public static Type GetDefaultMenu() => throw new NotImplementedException(); + public static Type? GetPlayerMenuType(CCSPlayerController player) => throw new NotImplementedException(); + public static Type SetPlayerMenuType(CCSPlayerController player, Type menuType) => throw new NotImplementedException(); + public static void MenuTypeMenu(CCSPlayerController player, BasePlugin plugin, IMenu? prevMenu) where T : BaseMenu => throw new NotImplementedException(); + public static BaseMenu MenuTypeMenuByType(Type type, CCSPlayerController player, BasePlugin plugin, IMenu? prevMenu) => throw new NotImplementedException(); + public static BaseMenu MenuTypeMenuByType(string type, CCSPlayerController player, BasePlugin plugin, IMenu? prevMenu) => throw new NotImplementedException(); + public static void AddMenuTypeMenuItems(BaseMenu menu, IMenu? prevMenu) => throw new NotImplementedException(); + } + + + public static class ResolutionManager + { + public class Resolution + { + public float PositionX; + public float PositionY; + } + public static Resolution GetDefaultResolution() => throw new NotImplementedException(); + public static Resolution GetPlayerResolution(CCSPlayerController player) => throw new NotImplementedException(); + public static void SetPlayerResolution(CCSPlayerController player, Resolution resolution) => throw new NotImplementedException(); + public static T ResolutionMenu(CCSPlayerController player, BasePlugin plugin, IMenu? prevMenu) where T : BaseMenu => throw new NotImplementedException(); + public static BaseMenu ResolutionMenuByType(Type type, CCSPlayerController player, BasePlugin plugin, IMenu? prevMenu) => throw new NotImplementedException(); + public static BaseMenu ResolutionMenuByType(string type, CCSPlayerController player, BasePlugin plugin, IMenu? prevMenu) => throw new NotImplementedException(); + } + + public static class VoteManager + { + public static bool IsVoteActive => throw new NotImplementedException(); + public static void CancelActiveVote() => throw new NotImplementedException(); + public static void OpenVoteMenu(List players, TMenu menu, Func, TMenu, IVoteMenuInstance> createInstance) where TMenu : IVoteMenu => throw new NotImplementedException(); + } + + public class YesNoVoteInfo + { + public int TotalVotes; + public int YesVotes; + public int NoVotes; + public int TotalClients; + public Dictionary ClientInfo = new(); + } +} + +namespace CS2MenuManager.API.Enum +{ + public enum CastVote + { + VOTE_NOTINCLUDED = -1, + VOTE_OPTION1, + VOTE_OPTION2, + VOTE_OPTION3, + VOTE_OPTION4, + VOTE_OPTION5, + VOTE_UNCAST + } + + public enum DisableOption + { + None, + DisableShowNumber, + DisableHideNumber + } + + public enum MenuType + { + Scrollable, + KeyPress, + Both + } + + public enum PostSelectAction + { + Close, + Reset, + Nothing + } + + public enum YesNoVoteAction + { + VoteAction_Start, + VoteAction_Vote, + VoteAction_End + } + public enum YesNoVoteEndReason + { + VoteEnd_AllVotes, + VoteEnd_TimeUp, + VoteEnd_Cancelled + } +} + +namespace CS2MenuManager.API.Interface +{ + public interface IMenu + { + string Title { get; set; } + List ItemOptions { get; } + bool ExitButton { get; set; } + int MenuTime { get; set; } + IMenu? PrevMenu { get; set; } + BasePlugin Plugin { get; } + ItemOption AddItem(string display, Action onSelect, DisableOption disableOption = DisableOption.None); + ItemOption AddItem(string display, DisableOption disableOption); + void Display(CCSPlayerController player, int time); + void DisplayAt(CCSPlayerController player, int firstItem, int time); + void DisplayToAll(int time); + void DisplayAtToAll(int firstItem, int time); + } + public interface IMenuInstance : IDisposable + { + CCSPlayerController Player { get; } + int Page { get; } + int CurrentOffset { get; } + int NumPerPage { get; } + Stack PrevPageOffsets { get; } + IMenu Menu { get; } + void NextPage(); + void PrevPage(); + void Reset(); + void Close(bool exitSound); + void Display(); + void OnKeyPress(CCSPlayerController player, int key); + } + + public interface IVoteMenu + { + string Title { get; } + string Details { get; } + CCSPlayerController? VoteCaller { get; } + BaseVoteInstance.YesNoVoteResult Result { get; } + BaseVoteInstance.YesNoVoteHandler? Handler { get; } + BasePlugin Plugin { get; } + int VoteTime { get; } + void DisplayVoteToAll(int time); + } + + public interface IVoteMenuInstance : IDisposable + { + IVoteMenu VoteMenu { get; } + CVoteController? VoteController { get; } + RecipientFilter CurrentVotefilter { get; } + Timer? Timer { get; } + int VoteCount { get; } + int VoterCount { get; } + int[] Voters { get; } + void Close(); + void Display(); + } +} + +namespace CS2MenuManager.API.Menu +{ + public class CenterHtmlMenu : BaseMenu + { + public CenterHtmlMenu(string title, BasePlugin plugin) : base(title, plugin) + { + throw new NotImplementedException(); + } + + public override void Display(CCSPlayerController player, int time) => throw new NotImplementedException(); + + public override void DisplayAt(CCSPlayerController player, int firstItem, int time) => throw new NotImplementedException(); + } + + public class CenterHtmlMenuInstance : BaseMenuInstance + { + public override int NumPerPage => throw new NotImplementedException(); + protected override int MenuItemsPerPage => throw new NotImplementedException(); + protected override bool HasNextButton => throw new NotImplementedException(); + public CenterHtmlMenuInstance(CCSPlayerController player, IMenu menu) : + base(player, menu) + { + throw new NotImplementedException(); + } + public override void Display() => throw new NotImplementedException(); + public override void Close(bool exitSound) => throw new NotImplementedException(); + } + public class ChatMenu : BaseMenu + { + public ChatMenu(string title, BasePlugin plugin) : + base(title, plugin) + { + } + + public override void Display(CCSPlayerController player, int time) => throw new NotImplementedException(); + public override void DisplayAt(CCSPlayerController player, int firstItem, int time) => throw new NotImplementedException(); + } + public class ChatMenuInstance : BaseMenuInstance + { + public ChatMenuInstance(CCSPlayerController player, ChatMenu menu) : + base(player, menu) + { + } + public override void Display() => throw new NotImplementedException(); + } + + public class ConsoleMenu : BaseMenu + { + public ConsoleMenu(string title, BasePlugin plugin) : + base(title, plugin) + { + } + public override void Display(CCSPlayerController player, int time) => throw new NotImplementedException(); + public override void DisplayAt(CCSPlayerController player, int firstItem, int time) => throw new NotImplementedException(); + } + + public class ConsoleMenuInstance : BaseMenuInstance + { + public ConsoleMenuInstance(CCSPlayerController player, IMenu menu) : + base(player, menu) + { + } + public override void Display() => throw new NotImplementedException(); + } + + public class PanoramaVote : BaseVote + { + public PanoramaVote( + string title, + string details, + BaseVoteInstance.YesNoVoteResult resultCallback, + BaseVoteInstance.YesNoVoteHandler? handler, + BasePlugin plugin + ) : base( + title, + details, + resultCallback, + handler, + plugin) + { + } + public override void DisplayVoteToAll(int time) => throw new NotImplementedException(); + } + + public class PanoramaVoteInstance : BaseVoteInstance + { + public PanoramaVoteInstance(List players, PanoramaVote menu) : + base(players, menu) + { + } + public override void Close() => throw new NotImplementedException(); + public override void Display() => throw new NotImplementedException(); + + } + + public class PlayerMenu : BaseMenu + { + public PlayerMenu(string title, BasePlugin plugin) : + base(title, plugin) + { + } + public override void Display(CCSPlayerController player, int time) => throw new NotImplementedException(); + public override void DisplayAt(CCSPlayerController player, int firstItem, int time) => throw new NotImplementedException(); + } + + public class ScreenMenu : BaseMenu + { + public ScreenMenu(string title, BasePlugin plugin) : + base(title, plugin) + { + } + public override void Display(CCSPlayerController player, int time) => throw new NotImplementedException(); + public override void DisplayAt(CCSPlayerController player, int firstItem, int time) => throw new NotImplementedException(); + } + + public class ScreenMenuInstance : BaseMenuInstance + { + public override int NumPerPage => throw new NotImplementedException(); + public ScreenMenuInstance(CCSPlayerController player, IMenu menu) : + base(player, menu) + { + } + public override void Display() => throw new NotImplementedException(); + public override void Close(bool exitSound) => throw new NotImplementedException(); + public override void OnKeyPress(CCSPlayerController player, int key) => throw new NotImplementedException(); + } + + public class WasdMenu : BaseMenu + { + public WasdMenu(string title, BasePlugin plugin) : + base(title, plugin) + { + } + public override void Display(CCSPlayerController player, int time) => throw new NotImplementedException(); + public override void DisplayAt(CCSPlayerController player, int firstItem, int time) => throw new NotImplementedException(); + } + + public class WasdMenuInstance : BaseMenuInstance + { + public string DisplayString => throw new NotImplementedException(); + public override int NumPerPage => throw new NotImplementedException(); + public WasdMenuInstance(CCSPlayerController player, IMenu menu) : + base(player, menu) + { + } + public override void Display() => throw new NotImplementedException(); + public override void Close(bool exitSound) => throw new NotImplementedException(); + public void OnTick() => throw new NotImplementedException(); + public void Choose() => throw new NotImplementedException(); + public void ScrollDown() => throw new NotImplementedException(); + public void ScrollUp() => throw new NotImplementedException(); + } +} diff --git a/src/UniversalMenu.Compat.CS2MenuManager/UniversalMenu.Compat.CS2MenuManager.csproj b/src/UniversalMenu.Compat.CS2MenuManager/UniversalMenu.Compat.CS2MenuManager.csproj new file mode 100644 index 0000000..74c9ead --- /dev/null +++ b/src/UniversalMenu.Compat.CS2MenuManager/UniversalMenu.Compat.CS2MenuManager.csproj @@ -0,0 +1,16 @@ + + + + CS2MenuManager + CS2MenuManager + Library + 1.0.37 + + + + + False + False + + + From ad17c2666af2680c3b4ad529b5127af3ec001fa2 Mon Sep 17 00:00:00 2001 From: Ashleigh Adams Date: Sun, 27 Jul 2025 01:56:31 +0100 Subject: [PATCH 2/3] Reimplement MenuManagerApi's interface to eliminate the need for additional plugin downloads --- CSSUniversalMenuAPI.sln | 6 + package.sh | 1 + .../IMenuApi.cs | 32 + ...alMenu.Compat.MenuManagerApi.Shared.csproj | 14 + .../MenuManagerTranslator.cs | 16 +- ...UniversalMenu.Compat.MenuManagerApi.csproj | 8 +- .../MenuManagerApiDriver.cs | 2 +- ...UniversalMenu.Driver.MenuManagerApi.csproj | 8 +- .../MenuManagerApi/MenuManagerApi.deps.json | 872 ------------------ thirdparty/MenuManagerApi/MenuManagerApi.dll | Bin 5120 -> 0 bytes thirdparty/MenuManagerApi/MenuManagerApi.pdb | Bin 12984 -> 0 bytes 11 files changed, 70 insertions(+), 889 deletions(-) create mode 100644 src/UniversalMenu.Compat.MenuManagerApi.Shared/IMenuApi.cs create mode 100644 src/UniversalMenu.Compat.MenuManagerApi.Shared/UniversalMenu.Compat.MenuManagerApi.Shared.csproj delete mode 100644 thirdparty/MenuManagerApi/MenuManagerApi.deps.json delete mode 100644 thirdparty/MenuManagerApi/MenuManagerApi.dll delete mode 100644 thirdparty/MenuManagerApi/MenuManagerApi.pdb diff --git a/CSSUniversalMenuAPI.sln b/CSSUniversalMenuAPI.sln index fa7030f..3ea0d81 100644 --- a/CSSUniversalMenuAPI.sln +++ b/CSSUniversalMenuAPI.sln @@ -46,6 +46,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalMenu.Driver.MenuMa EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalMenu.Compat.CS2MenuManager", "src\UniversalMenu.Compat.CS2MenuManager\UniversalMenu.Compat.CS2MenuManager.csproj", "{3A6C4FF8-19C5-3573-83F2-D42C082AFE43}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalMenu.Compat.MenuManagerApi.Shared", "src\UniversalMenu.Compat.MenuManagerApi.Shared\UniversalMenu.Compat.MenuManagerApi.Shared.csproj", "{1F800E4F-6CE5-D7C2-D40F-355098E91612}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -88,6 +90,10 @@ Global {3A6C4FF8-19C5-3573-83F2-D42C082AFE43}.Debug|Any CPU.Build.0 = Debug|Any CPU {3A6C4FF8-19C5-3573-83F2-D42C082AFE43}.Release|Any CPU.ActiveCfg = Release|Any CPU {3A6C4FF8-19C5-3573-83F2-D42C082AFE43}.Release|Any CPU.Build.0 = Release|Any CPU + {1F800E4F-6CE5-D7C2-D40F-355098E91612}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1F800E4F-6CE5-D7C2-D40F-355098E91612}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1F800E4F-6CE5-D7C2-D40F-355098E91612}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1F800E4F-6CE5-D7C2-D40F-355098E91612}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/package.sh b/package.sh index f5eb31b..776c3fb 100644 --- a/package.sh +++ b/package.sh @@ -40,6 +40,7 @@ commit_zip setup_zip UniversalMenu.Compat.MenuManagerApi copy_dir src/UniversalMenu.Compat.MenuManagerApi/bin/Release/net8.0/publish plugins/UniversalMenu.Compat.MenuManagerApi +copy_dir src/UniversalMenu.Compat.MenuManagerApi.Shared/bin/Release/net8.0/publish shared/MenuManagerApi commit_zip #setup_zip UniversalMenu.Compat.ScreenMenuAPI diff --git a/src/UniversalMenu.Compat.MenuManagerApi.Shared/IMenuApi.cs b/src/UniversalMenu.Compat.MenuManagerApi.Shared/IMenuApi.cs new file mode 100644 index 0000000..615c937 --- /dev/null +++ b/src/UniversalMenu.Compat.MenuManagerApi.Shared/IMenuApi.cs @@ -0,0 +1,32 @@ +using System; + +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Menu; + +namespace MenuManager; + +public enum MenuType +{ + Default = -1, + ChatMenu, + ConsoleMenu, + CenterMenu, + ButtonMenu, + MetamodMenu, +} + +// note: the parameter names have been changed to follow C# naming conventions, and added nullbility annotations. +// this is safe as this should only link to already-compiled code (excluding CSSUniversalMenuApi), +// and thus only needs to retain binary compatibility and not source compatibility. +public interface IMenuApi +{ + IMenu GetMenu(string title, Action? backAction = null, Action? resetAction = null); + [Obsolete] + IMenu NewMenu(string title, Action? backAction = null); + IMenu GetMenuForcetype(string title, MenuType type, Action? backAction = null, Action? resetAction = null); + [Obsolete] + IMenu NewMenuForcetype(string title, MenuType type, Action? backAction = null); + void CloseMenu(CCSPlayerController player); + MenuType GetMenuType(CCSPlayerController player); + bool HasOpenedMenu(CCSPlayerController player); +} diff --git a/src/UniversalMenu.Compat.MenuManagerApi.Shared/UniversalMenu.Compat.MenuManagerApi.Shared.csproj b/src/UniversalMenu.Compat.MenuManagerApi.Shared/UniversalMenu.Compat.MenuManagerApi.Shared.csproj new file mode 100644 index 0000000..3342bb0 --- /dev/null +++ b/src/UniversalMenu.Compat.MenuManagerApi.Shared/UniversalMenu.Compat.MenuManagerApi.Shared.csproj @@ -0,0 +1,14 @@ + + + + Library + MenuManagerApi + MenuManagerApi + 1.4.1 + + + + + + + diff --git a/src/UniversalMenu.Compat.MenuManagerApi/MenuManagerTranslator.cs b/src/UniversalMenu.Compat.MenuManagerApi/MenuManagerTranslator.cs index 681ed16..807bc92 100644 --- a/src/UniversalMenu.Compat.MenuManagerApi/MenuManagerTranslator.cs +++ b/src/UniversalMenu.Compat.MenuManagerApi/MenuManagerTranslator.cs @@ -49,14 +49,14 @@ void IMenuManagerAPI.CloseMenu(CCSPlayerController player) state.ActiveMenu = null; } - ICssMenu IMenuManagerAPI.GetMenu(string title, Action back_action, Action reset_action) + ICssMenu IMenuManagerAPI.GetMenu(string title, Action? backAction, Action? resetAction) { - return new MenuInstanceTranslator(title, this, back_action, reset_action, MenuManagerMenuType.Default); + return new MenuInstanceTranslator(title, this, backAction, resetAction, MenuManagerMenuType.Default); } - ICssMenu IMenuManagerAPI.GetMenuForcetype(string title, MenuManagerMenuType type, Action back_action, Action reset_action) + ICssMenu IMenuManagerAPI.GetMenuForcetype(string title, MenuManagerMenuType type, Action? backAction, Action? resetAction) { - return new MenuInstanceTranslator(title, this, back_action, reset_action, type); + return new MenuInstanceTranslator(title, this, backAction, resetAction, type); } MenuManagerMenuType IMenuManagerAPI.GetMenuType(CCSPlayerController player) @@ -69,14 +69,14 @@ bool IMenuManagerAPI.HasOpenedMenu(CCSPlayerController player) return CSSUniversalMenuAPI.UniversalMenu.DefaultDriver?.IsMenuOpen(player) ?? false; } - ICssMenu IMenuManagerAPI.NewMenu(string title, Action back_action) + ICssMenu IMenuManagerAPI.NewMenu(string title, Action? backAction) { - return new MenuInstanceTranslator(title, this, back_action, null, MenuManagerMenuType.Default); + return new MenuInstanceTranslator(title, this, backAction, null, MenuManagerMenuType.Default); } - ICssMenu IMenuManagerAPI.NewMenuForcetype(string title, MenuManagerMenuType type, Action back_action) + ICssMenu IMenuManagerAPI.NewMenuForcetype(string title, MenuManagerMenuType type, Action? backAction) { - return new MenuInstanceTranslator(title, this, back_action, null, type); + return new MenuInstanceTranslator(title, this, backAction, null, type); } } diff --git a/src/UniversalMenu.Compat.MenuManagerApi/UniversalMenu.Compat.MenuManagerApi.csproj b/src/UniversalMenu.Compat.MenuManagerApi/UniversalMenu.Compat.MenuManagerApi.csproj index 0760fa1..245803a 100644 --- a/src/UniversalMenu.Compat.MenuManagerApi/UniversalMenu.Compat.MenuManagerApi.csproj +++ b/src/UniversalMenu.Compat.MenuManagerApi/UniversalMenu.Compat.MenuManagerApi.csproj @@ -14,10 +14,10 @@ False - - false - ..\..\thirdparty\MenuManagerApi\MenuManagerApi.dll - + + False + False + diff --git a/src/UniversalMenu.Driver.MenuManagerApi/MenuManagerApiDriver.cs b/src/UniversalMenu.Driver.MenuManagerApi/MenuManagerApiDriver.cs index a062960..60c48b2 100644 --- a/src/UniversalMenu.Driver.MenuManagerApi/MenuManagerApiDriver.cs +++ b/src/UniversalMenu.Driver.MenuManagerApi/MenuManagerApiDriver.cs @@ -130,7 +130,7 @@ void IMenu.Display() if (NavigateBack is not null) navBack = (player) => NavigateBack(this); - TheMenu = MenuAPI.MenuManagerApi.GetMenu(Title, back_action: navBack!); + TheMenu = MenuAPI.MenuManagerApi.GetMenu(Title, backAction: navBack!); foreach (var item in MenuItems) TheMenu.AddMenuOption(item.Title, (player, option) => item.RaiseSelected(), !item.Enabled); diff --git a/src/UniversalMenu.Driver.MenuManagerApi/UniversalMenu.Driver.MenuManagerApi.csproj b/src/UniversalMenu.Driver.MenuManagerApi/UniversalMenu.Driver.MenuManagerApi.csproj index f86753e..04e7876 100644 --- a/src/UniversalMenu.Driver.MenuManagerApi/UniversalMenu.Driver.MenuManagerApi.csproj +++ b/src/UniversalMenu.Driver.MenuManagerApi/UniversalMenu.Driver.MenuManagerApi.csproj @@ -10,10 +10,10 @@ False - - false - ..\..\thirdparty\MenuManagerApi\MenuManagerApi.dll - + + False + False + diff --git a/thirdparty/MenuManagerApi/MenuManagerApi.deps.json b/thirdparty/MenuManagerApi/MenuManagerApi.deps.json deleted file mode 100644 index 9df78e1..0000000 --- a/thirdparty/MenuManagerApi/MenuManagerApi.deps.json +++ /dev/null @@ -1,872 +0,0 @@ -{ - "runtimeTarget": { - "name": ".NETCoreApp,Version=v8.0", - "signature": "" - }, - "compilationOptions": {}, - "targets": { - ".NETCoreApp,Version=v8.0": { - "MenuManagerApi/1.0.0": { - "dependencies": { - "CounterStrikeSharp.API": "1.0.228" - }, - "runtime": { - "MenuManagerApi.dll": {} - } - }, - "CounterStrikeSharp.API/1.0.228": { - "dependencies": { - "McMaster.NETCore.Plugins": "1.4.0", - "Microsoft.CSharp": "4.7.0", - "Microsoft.DotNet.ApiCompat.Task": "8.0.203", - "Microsoft.Extensions.Hosting": "8.0.0", - "Microsoft.Extensions.Hosting.Abstractions": "8.0.0", - "Microsoft.Extensions.Localization.Abstractions": "8.0.3", - "Microsoft.Extensions.Logging": "8.0.0", - "Scrutor": "4.2.2", - "Serilog.Extensions.Logging": "8.0.0", - "Serilog.Sinks.Console": "5.0.0", - "Serilog.Sinks.File": "5.0.0", - "System.Data.DataSetExtensions": "4.5.0" - }, - "runtime": { - "lib/net8.0/CounterStrikeSharp.API.dll": { - "assemblyVersion": "1.0.228.0", - "fileVersion": "1.0.228.0" - } - } - }, - "McMaster.NETCore.Plugins/1.4.0": { - "dependencies": { - "Microsoft.DotNet.PlatformAbstractions": "3.1.6", - "Microsoft.Extensions.DependencyModel": "6.0.0" - }, - "runtime": { - "lib/netcoreapp3.1/McMaster.NETCore.Plugins.dll": { - "assemblyVersion": "1.4.0.0", - "fileVersion": "1.4.0.0" - } - } - }, - "Microsoft.CSharp/4.7.0": {}, - "Microsoft.DotNet.ApiCompat.Task/8.0.203": {}, - "Microsoft.DotNet.PlatformAbstractions/3.1.6": { - "runtime": { - "lib/netstandard2.0/Microsoft.DotNet.PlatformAbstractions.dll": { - "assemblyVersion": "3.1.6.0", - "fileVersion": "3.100.620.31604" - } - } - }, - "Microsoft.Extensions.Configuration/8.0.0": { - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.Primitives": "8.0.0" - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.Configuration.dll": { - "assemblyVersion": "8.0.0.0", - "fileVersion": "8.0.23.53103" - } - } - }, - "Microsoft.Extensions.Configuration.Abstractions/8.0.0": { - "dependencies": { - "Microsoft.Extensions.Primitives": "8.0.0" - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.Configuration.Abstractions.dll": { - "assemblyVersion": "8.0.0.0", - "fileVersion": "8.0.23.53103" - } - } - }, - "Microsoft.Extensions.Configuration.Binder/8.0.0": { - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.Configuration.Binder.dll": { - "assemblyVersion": "8.0.0.0", - "fileVersion": "8.0.23.53103" - } - } - }, - "Microsoft.Extensions.Configuration.CommandLine/8.0.0": { - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.Configuration.CommandLine.dll": { - "assemblyVersion": "8.0.0.0", - "fileVersion": "8.0.23.53103" - } - } - }, - "Microsoft.Extensions.Configuration.EnvironmentVariables/8.0.0": { - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.Configuration.EnvironmentVariables.dll": { - "assemblyVersion": "8.0.0.0", - "fileVersion": "8.0.23.53103" - } - } - }, - "Microsoft.Extensions.Configuration.FileExtensions/8.0.0": { - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", - "Microsoft.Extensions.FileProviders.Physical": "8.0.0", - "Microsoft.Extensions.Primitives": "8.0.0" - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.Configuration.FileExtensions.dll": { - "assemblyVersion": "8.0.0.0", - "fileVersion": "8.0.23.53103" - } - } - }, - "Microsoft.Extensions.Configuration.Json/8.0.0": { - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.Configuration.FileExtensions": "8.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", - "System.Text.Json": "8.0.0" - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.Configuration.Json.dll": { - "assemblyVersion": "8.0.0.0", - "fileVersion": "8.0.23.53103" - } - } - }, - "Microsoft.Extensions.Configuration.UserSecrets/8.0.0": { - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.Configuration.Json": "8.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", - "Microsoft.Extensions.FileProviders.Physical": "8.0.0" - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.Configuration.UserSecrets.dll": { - "assemblyVersion": "8.0.0.0", - "fileVersion": "8.0.23.53103" - } - } - }, - "Microsoft.Extensions.DependencyInjection/8.0.0": { - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.DependencyInjection.dll": { - "assemblyVersion": "8.0.0.0", - "fileVersion": "8.0.23.53103" - } - } - }, - "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": { - "runtime": { - "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { - "assemblyVersion": "8.0.0.0", - "fileVersion": "8.0.23.53103" - } - } - }, - "Microsoft.Extensions.DependencyModel/6.0.0": { - "dependencies": { - "System.Buffers": "4.5.1", - "System.Memory": "4.5.4", - "System.Runtime.CompilerServices.Unsafe": "6.0.0", - "System.Text.Encodings.Web": "8.0.0", - "System.Text.Json": "8.0.0" - }, - "runtime": { - "lib/netstandard2.0/Microsoft.Extensions.DependencyModel.dll": { - "assemblyVersion": "6.0.0.0", - "fileVersion": "6.0.21.52210" - } - } - }, - "Microsoft.Extensions.Diagnostics/8.0.0": { - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.0", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.Diagnostics.dll": { - "assemblyVersion": "8.0.0.0", - "fileVersion": "8.0.23.53103" - } - } - }, - "Microsoft.Extensions.Diagnostics.Abstractions/8.0.0": { - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", - "Microsoft.Extensions.Options": "8.0.0", - "System.Diagnostics.DiagnosticSource": "8.0.0" - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.dll": { - "assemblyVersion": "8.0.0.0", - "fileVersion": "8.0.23.53103" - } - } - }, - "Microsoft.Extensions.FileProviders.Abstractions/8.0.0": { - "dependencies": { - "Microsoft.Extensions.Primitives": "8.0.0" - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.FileProviders.Abstractions.dll": { - "assemblyVersion": "8.0.0.0", - "fileVersion": "8.0.23.53103" - } - } - }, - "Microsoft.Extensions.FileProviders.Physical/8.0.0": { - "dependencies": { - "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", - "Microsoft.Extensions.FileSystemGlobbing": "8.0.0", - "Microsoft.Extensions.Primitives": "8.0.0" - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.FileProviders.Physical.dll": { - "assemblyVersion": "8.0.0.0", - "fileVersion": "8.0.23.53103" - } - } - }, - "Microsoft.Extensions.FileSystemGlobbing/8.0.0": { - "runtime": { - "lib/net8.0/Microsoft.Extensions.FileSystemGlobbing.dll": { - "assemblyVersion": "8.0.0.0", - "fileVersion": "8.0.23.53103" - } - } - }, - "Microsoft.Extensions.Hosting/8.0.0": { - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.Configuration.Binder": "8.0.0", - "Microsoft.Extensions.Configuration.CommandLine": "8.0.0", - "Microsoft.Extensions.Configuration.EnvironmentVariables": "8.0.0", - "Microsoft.Extensions.Configuration.FileExtensions": "8.0.0", - "Microsoft.Extensions.Configuration.Json": "8.0.0", - "Microsoft.Extensions.Configuration.UserSecrets": "8.0.0", - "Microsoft.Extensions.DependencyInjection": "8.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", - "Microsoft.Extensions.Diagnostics": "8.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", - "Microsoft.Extensions.FileProviders.Physical": "8.0.0", - "Microsoft.Extensions.Hosting.Abstractions": "8.0.0", - "Microsoft.Extensions.Logging": "8.0.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.0", - "Microsoft.Extensions.Logging.Configuration": "8.0.0", - "Microsoft.Extensions.Logging.Console": "8.0.0", - "Microsoft.Extensions.Logging.Debug": "8.0.0", - "Microsoft.Extensions.Logging.EventLog": "8.0.0", - "Microsoft.Extensions.Logging.EventSource": "8.0.0", - "Microsoft.Extensions.Options": "8.0.0" - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.Hosting.dll": { - "assemblyVersion": "8.0.0.0", - "fileVersion": "8.0.23.53103" - } - } - }, - "Microsoft.Extensions.Hosting.Abstractions/8.0.0": { - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", - "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.0" - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.Hosting.Abstractions.dll": { - "assemblyVersion": "8.0.0.0", - "fileVersion": "8.0.23.53103" - } - } - }, - "Microsoft.Extensions.Localization.Abstractions/8.0.3": { - "runtime": { - "lib/net8.0/Microsoft.Extensions.Localization.Abstractions.dll": { - "assemblyVersion": "8.0.0.0", - "fileVersion": "8.0.324.11615" - } - } - }, - "Microsoft.Extensions.Logging/8.0.0": { - "dependencies": { - "Microsoft.Extensions.DependencyInjection": "8.0.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.0", - "Microsoft.Extensions.Options": "8.0.0" - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.Logging.dll": { - "assemblyVersion": "8.0.0.0", - "fileVersion": "8.0.23.53103" - } - } - }, - "Microsoft.Extensions.Logging.Abstractions/8.0.0": { - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": { - "assemblyVersion": "8.0.0.0", - "fileVersion": "8.0.23.53103" - } - } - }, - "Microsoft.Extensions.Logging.Configuration/8.0.0": { - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.Configuration.Binder": "8.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", - "Microsoft.Extensions.Logging": "8.0.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.0", - "Microsoft.Extensions.Options": "8.0.0", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.Logging.Configuration.dll": { - "assemblyVersion": "8.0.0.0", - "fileVersion": "8.0.23.53103" - } - } - }, - "Microsoft.Extensions.Logging.Console/8.0.0": { - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", - "Microsoft.Extensions.Logging": "8.0.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.0", - "Microsoft.Extensions.Logging.Configuration": "8.0.0", - "Microsoft.Extensions.Options": "8.0.0", - "System.Text.Json": "8.0.0" - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.Logging.Console.dll": { - "assemblyVersion": "8.0.0.0", - "fileVersion": "8.0.23.53103" - } - } - }, - "Microsoft.Extensions.Logging.Debug/8.0.0": { - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", - "Microsoft.Extensions.Logging": "8.0.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.0" - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.Logging.Debug.dll": { - "assemblyVersion": "8.0.0.0", - "fileVersion": "8.0.23.53103" - } - } - }, - "Microsoft.Extensions.Logging.EventLog/8.0.0": { - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", - "Microsoft.Extensions.Logging": "8.0.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.0", - "Microsoft.Extensions.Options": "8.0.0", - "System.Diagnostics.EventLog": "8.0.0" - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.Logging.EventLog.dll": { - "assemblyVersion": "8.0.0.0", - "fileVersion": "8.0.23.53103" - } - } - }, - "Microsoft.Extensions.Logging.EventSource/8.0.0": { - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", - "Microsoft.Extensions.Logging": "8.0.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.0", - "Microsoft.Extensions.Options": "8.0.0", - "Microsoft.Extensions.Primitives": "8.0.0", - "System.Text.Json": "8.0.0" - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.Logging.EventSource.dll": { - "assemblyVersion": "8.0.0.0", - "fileVersion": "8.0.23.53103" - } - } - }, - "Microsoft.Extensions.Options/8.0.0": { - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", - "Microsoft.Extensions.Primitives": "8.0.0" - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.Options.dll": { - "assemblyVersion": "8.0.0.0", - "fileVersion": "8.0.23.53103" - } - } - }, - "Microsoft.Extensions.Options.ConfigurationExtensions/8.0.0": { - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.Configuration.Binder": "8.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", - "Microsoft.Extensions.Options": "8.0.0", - "Microsoft.Extensions.Primitives": "8.0.0" - }, - "runtime": { - "lib/net8.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll": { - "assemblyVersion": "8.0.0.0", - "fileVersion": "8.0.23.53103" - } - } - }, - "Microsoft.Extensions.Primitives/8.0.0": { - "runtime": { - "lib/net8.0/Microsoft.Extensions.Primitives.dll": { - "assemblyVersion": "8.0.0.0", - "fileVersion": "8.0.23.53103" - } - } - }, - "Scrutor/4.2.2": { - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", - "Microsoft.Extensions.DependencyModel": "6.0.0" - }, - "runtime": { - "lib/net6.0/Scrutor.dll": { - "assemblyVersion": "4.0.0.0", - "fileVersion": "4.0.0.0" - } - } - }, - "Serilog/3.1.1": { - "runtime": { - "lib/net7.0/Serilog.dll": { - "assemblyVersion": "2.0.0.0", - "fileVersion": "3.1.1.0" - } - } - }, - "Serilog.Extensions.Logging/8.0.0": { - "dependencies": { - "Microsoft.Extensions.Logging": "8.0.0", - "Serilog": "3.1.1" - }, - "runtime": { - "lib/net8.0/Serilog.Extensions.Logging.dll": { - "assemblyVersion": "7.0.0.0", - "fileVersion": "8.0.0.0" - } - } - }, - "Serilog.Sinks.Console/5.0.0": { - "dependencies": { - "Serilog": "3.1.1" - }, - "runtime": { - "lib/net7.0/Serilog.Sinks.Console.dll": { - "assemblyVersion": "5.0.0.0", - "fileVersion": "5.0.0.0" - } - } - }, - "Serilog.Sinks.File/5.0.0": { - "dependencies": { - "Serilog": "3.1.1" - }, - "runtime": { - "lib/net5.0/Serilog.Sinks.File.dll": { - "assemblyVersion": "5.0.0.0", - "fileVersion": "5.0.0.0" - } - } - }, - "System.Buffers/4.5.1": {}, - "System.Data.DataSetExtensions/4.5.0": {}, - "System.Diagnostics.DiagnosticSource/8.0.0": {}, - "System.Diagnostics.EventLog/8.0.0": { - "runtime": { - "lib/net8.0/System.Diagnostics.EventLog.dll": { - "assemblyVersion": "8.0.0.0", - "fileVersion": "8.0.23.53103" - } - }, - "runtimeTargets": { - "runtimes/win/lib/net8.0/System.Diagnostics.EventLog.Messages.dll": { - "rid": "win", - "assetType": "runtime", - "assemblyVersion": "8.0.0.0", - "fileVersion": "0.0.0.0" - }, - "runtimes/win/lib/net8.0/System.Diagnostics.EventLog.dll": { - "rid": "win", - "assetType": "runtime", - "assemblyVersion": "8.0.0.0", - "fileVersion": "8.0.23.53103" - } - } - }, - "System.Memory/4.5.4": {}, - "System.Runtime.CompilerServices.Unsafe/6.0.0": {}, - "System.Text.Encodings.Web/8.0.0": {}, - "System.Text.Json/8.0.0": { - "dependencies": { - "System.Text.Encodings.Web": "8.0.0" - } - } - } - }, - "libraries": { - "MenuManagerApi/1.0.0": { - "type": "project", - "serviceable": false, - "sha512": "" - }, - "CounterStrikeSharp.API/1.0.228": { - "type": "package", - "serviceable": true, - "sha512": "sha512-oJWeMCJt/uQZEOXucgugu3u+QBYBqxzONf/rHjBetIZCeqgUMilo3s10GgyRMhHBDS0nBO5POUcg6K96aTxwLg==", - "path": "counterstrikesharp.api/1.0.228", - "hashPath": "counterstrikesharp.api.1.0.228.nupkg.sha512" - }, - "McMaster.NETCore.Plugins/1.4.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-UKw5Z2/QHhkR7kiAJmqdCwVDMQV0lwsfj10+FG676r8DsJWIpxtachtEjE0qBs9WoK5GUQIqxgyFeYUSwuPszg==", - "path": "mcmaster.netcore.plugins/1.4.0", - "hashPath": "mcmaster.netcore.plugins.1.4.0.nupkg.sha512" - }, - "Microsoft.CSharp/4.7.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==", - "path": "microsoft.csharp/4.7.0", - "hashPath": "microsoft.csharp.4.7.0.nupkg.sha512" - }, - "Microsoft.DotNet.ApiCompat.Task/8.0.203": { - "type": "package", - "serviceable": true, - "sha512": "sha512-nPEGMojf1mj1oVixe0aiBimSn6xUoZswSjpMPZFMkZ+znYm2GEM5tWGZEWb6OSNIo5gWKyDi1WcI4IL7YiL1Zw==", - "path": "microsoft.dotnet.apicompat.task/8.0.203", - "hashPath": "microsoft.dotnet.apicompat.task.8.0.203.nupkg.sha512" - }, - "Microsoft.DotNet.PlatformAbstractions/3.1.6": { - "type": "package", - "serviceable": true, - "sha512": "sha512-jek4XYaQ/PGUwDKKhwR8K47Uh1189PFzMeLqO83mXrXQVIpARZCcfuDedH50YDTepBkfijCZN5U/vZi++erxtg==", - "path": "microsoft.dotnet.platformabstractions/3.1.6", - "hashPath": "microsoft.dotnet.platformabstractions.3.1.6.nupkg.sha512" - }, - "Microsoft.Extensions.Configuration/8.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-0J/9YNXTMWSZP2p2+nvl8p71zpSwokZXZuJW+VjdErkegAnFdO1XlqtA62SJtgVYHdKu3uPxJHcMR/r35HwFBA==", - "path": "microsoft.extensions.configuration/8.0.0", - "hashPath": "microsoft.extensions.configuration.8.0.0.nupkg.sha512" - }, - "Microsoft.Extensions.Configuration.Abstractions/8.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-3lE/iLSutpgX1CC0NOW70FJoGARRHbyKmG7dc0klnUZ9Dd9hS6N/POPWhKhMLCEuNN5nXEY5agmlFtH562vqhQ==", - "path": "microsoft.extensions.configuration.abstractions/8.0.0", - "hashPath": "microsoft.extensions.configuration.abstractions.8.0.0.nupkg.sha512" - }, - "Microsoft.Extensions.Configuration.Binder/8.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-mBMoXLsr5s1y2zOHWmKsE9veDcx8h1x/c3rz4baEdQKTeDcmQAPNbB54Pi/lhFO3K431eEq6PFbMgLaa6PHFfA==", - "path": "microsoft.extensions.configuration.binder/8.0.0", - "hashPath": "microsoft.extensions.configuration.binder.8.0.0.nupkg.sha512" - }, - "Microsoft.Extensions.Configuration.CommandLine/8.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-NZuZMz3Q8Z780nKX3ifV1fE7lS+6pynDHK71OfU4OZ1ItgvDOhyOC7E6z+JMZrAj63zRpwbdldYFk499t3+1dQ==", - "path": "microsoft.extensions.configuration.commandline/8.0.0", - "hashPath": "microsoft.extensions.configuration.commandline.8.0.0.nupkg.sha512" - }, - "Microsoft.Extensions.Configuration.EnvironmentVariables/8.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-plvZ0ZIpq+97gdPNNvhwvrEZ92kNml9hd1pe3idMA7svR0PztdzVLkoWLcRFgySYXUJc3kSM3Xw3mNFMo/bxRA==", - "path": "microsoft.extensions.configuration.environmentvariables/8.0.0", - "hashPath": "microsoft.extensions.configuration.environmentvariables.8.0.0.nupkg.sha512" - }, - "Microsoft.Extensions.Configuration.FileExtensions/8.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-McP+Lz/EKwvtCv48z0YImw+L1gi1gy5rHhNaNIY2CrjloV+XY8gydT8DjMR6zWeL13AFK+DioVpppwAuO1Gi1w==", - "path": "microsoft.extensions.configuration.fileextensions/8.0.0", - "hashPath": "microsoft.extensions.configuration.fileextensions.8.0.0.nupkg.sha512" - }, - "Microsoft.Extensions.Configuration.Json/8.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-C2wqUoh9OmRL1akaCcKSTmRU8z0kckfImG7zLNI8uyi47Lp+zd5LWAD17waPQEqCz3ioWOCrFUo+JJuoeZLOBw==", - "path": "microsoft.extensions.configuration.json/8.0.0", - "hashPath": "microsoft.extensions.configuration.json.8.0.0.nupkg.sha512" - }, - "Microsoft.Extensions.Configuration.UserSecrets/8.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-ihDHu2dJYQird9pl2CbdwuNDfvCZdOS0S7SPlNfhPt0B81UTT+yyZKz2pimFZGUp3AfuBRnqUCxB2SjsZKHVUw==", - "path": "microsoft.extensions.configuration.usersecrets/8.0.0", - "hashPath": "microsoft.extensions.configuration.usersecrets.8.0.0.nupkg.sha512" - }, - "Microsoft.Extensions.DependencyInjection/8.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==", - "path": "microsoft.extensions.dependencyinjection/8.0.0", - "hashPath": "microsoft.extensions.dependencyinjection.8.0.0.nupkg.sha512" - }, - "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==", - "path": "microsoft.extensions.dependencyinjection.abstractions/8.0.0", - "hashPath": "microsoft.extensions.dependencyinjection.abstractions.8.0.0.nupkg.sha512" - }, - "Microsoft.Extensions.DependencyModel/6.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-TD5QHg98m3+QhgEV1YVoNMl5KtBw/4rjfxLHO0e/YV9bPUBDKntApP4xdrVtGgCeQZHVfC2EXIGsdpRNrr87Pg==", - "path": "microsoft.extensions.dependencymodel/6.0.0", - "hashPath": "microsoft.extensions.dependencymodel.6.0.0.nupkg.sha512" - }, - "Microsoft.Extensions.Diagnostics/8.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-3PZp/YSkIXrF7QK7PfC1bkyRYwqOHpWFad8Qx+4wkuumAeXo1NHaxpS9LboNA9OvNSAu+QOVlXbMyoY+pHSqcw==", - "path": "microsoft.extensions.diagnostics/8.0.0", - "hashPath": "microsoft.extensions.diagnostics.8.0.0.nupkg.sha512" - }, - "Microsoft.Extensions.Diagnostics.Abstractions/8.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-JHYCQG7HmugNYUhOl368g+NMxYE/N/AiclCYRNlgCY9eVyiBkOHMwK4x60RYMxv9EL3+rmj1mqHvdCiPpC+D4Q==", - "path": "microsoft.extensions.diagnostics.abstractions/8.0.0", - "hashPath": "microsoft.extensions.diagnostics.abstractions.8.0.0.nupkg.sha512" - }, - "Microsoft.Extensions.FileProviders.Abstractions/8.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-ZbaMlhJlpisjuWbvXr4LdAst/1XxH3vZ6A0BsgTphZ2L4PGuxRLz7Jr/S7mkAAnOn78Vu0fKhEgNF5JO3zfjqQ==", - "path": "microsoft.extensions.fileproviders.abstractions/8.0.0", - "hashPath": "microsoft.extensions.fileproviders.abstractions.8.0.0.nupkg.sha512" - }, - "Microsoft.Extensions.FileProviders.Physical/8.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-UboiXxpPUpwulHvIAVE36Knq0VSHaAmfrFkegLyBZeaADuKezJ/AIXYAW8F5GBlGk/VaibN2k/Zn1ca8YAfVdA==", - "path": "microsoft.extensions.fileproviders.physical/8.0.0", - "hashPath": "microsoft.extensions.fileproviders.physical.8.0.0.nupkg.sha512" - }, - "Microsoft.Extensions.FileSystemGlobbing/8.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-OK+670i7esqlQrPjdIKRbsyMCe9g5kSLpRRQGSr4Q58AOYEe/hCnfLZprh7viNisSUUQZmMrbbuDaIrP+V1ebQ==", - "path": "microsoft.extensions.filesystemglobbing/8.0.0", - "hashPath": "microsoft.extensions.filesystemglobbing.8.0.0.nupkg.sha512" - }, - "Microsoft.Extensions.Hosting/8.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-ItYHpdqVp5/oFLT5QqbopnkKlyFG9EW/9nhM6/yfObeKt6Su0wkBio6AizgRHGNwhJuAtlE5VIjow5JOTrip6w==", - "path": "microsoft.extensions.hosting/8.0.0", - "hashPath": "microsoft.extensions.hosting.8.0.0.nupkg.sha512" - }, - "Microsoft.Extensions.Hosting.Abstractions/8.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-AG7HWwVRdCHlaA++1oKDxLsXIBxmDpMPb3VoyOoAghEWnkUvEAdYQUwnV4jJbAaa/nMYNiEh5ByoLauZBEiovg==", - "path": "microsoft.extensions.hosting.abstractions/8.0.0", - "hashPath": "microsoft.extensions.hosting.abstractions.8.0.0.nupkg.sha512" - }, - "Microsoft.Extensions.Localization.Abstractions/8.0.3": { - "type": "package", - "serviceable": true, - "sha512": "sha512-k/kUPm1FQBxcs9/vsM1eF4qIOg2Sovqh/+KUGHur5Mc0Y3OFGuoz9ktBX7LA0gPz53SZhW3W3oaSaMFFcjgM6Q==", - "path": "microsoft.extensions.localization.abstractions/8.0.3", - "hashPath": "microsoft.extensions.localization.abstractions.8.0.3.nupkg.sha512" - }, - "Microsoft.Extensions.Logging/8.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==", - "path": "microsoft.extensions.logging/8.0.0", - "hashPath": "microsoft.extensions.logging.8.0.0.nupkg.sha512" - }, - "Microsoft.Extensions.Logging.Abstractions/8.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==", - "path": "microsoft.extensions.logging.abstractions/8.0.0", - "hashPath": "microsoft.extensions.logging.abstractions.8.0.0.nupkg.sha512" - }, - "Microsoft.Extensions.Logging.Configuration/8.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-ixXXV0G/12g6MXK65TLngYN9V5hQQRuV+fZi882WIoVJT7h5JvoYoxTEwCgdqwLjSneqh1O+66gM8sMr9z/rsQ==", - "path": "microsoft.extensions.logging.configuration/8.0.0", - "hashPath": "microsoft.extensions.logging.configuration.8.0.0.nupkg.sha512" - }, - "Microsoft.Extensions.Logging.Console/8.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-e+48o7DztoYog+PY430lPxrM4mm3PbA6qucvQtUDDwVo4MO+ejMw7YGc/o2rnxbxj4isPxdfKFzTxvXMwAz83A==", - "path": "microsoft.extensions.logging.console/8.0.0", - "hashPath": "microsoft.extensions.logging.console.8.0.0.nupkg.sha512" - }, - "Microsoft.Extensions.Logging.Debug/8.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-dt0x21qBdudHLW/bjMJpkixv858RRr8eSomgVbU8qljOyfrfDGi1JQvpF9w8S7ziRPtRKisuWaOwFxJM82GxeA==", - "path": "microsoft.extensions.logging.debug/8.0.0", - "hashPath": "microsoft.extensions.logging.debug.8.0.0.nupkg.sha512" - }, - "Microsoft.Extensions.Logging.EventLog/8.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-3X9D3sl7EmOu7vQp5MJrmIJBl5XSdOhZPYXUeFfYa6Nnm9+tok8x3t3IVPLhm7UJtPOU61ohFchw8rNm9tIYOQ==", - "path": "microsoft.extensions.logging.eventlog/8.0.0", - "hashPath": "microsoft.extensions.logging.eventlog.8.0.0.nupkg.sha512" - }, - "Microsoft.Extensions.Logging.EventSource/8.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-oKcPMrw+luz2DUAKhwFXrmFikZWnyc8l2RKoQwqU3KIZZjcfoJE0zRHAnqATfhRZhtcbjl/QkiY2Xjxp0xu+6w==", - "path": "microsoft.extensions.logging.eventsource/8.0.0", - "hashPath": "microsoft.extensions.logging.eventsource.8.0.0.nupkg.sha512" - }, - "Microsoft.Extensions.Options/8.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==", - "path": "microsoft.extensions.options/8.0.0", - "hashPath": "microsoft.extensions.options.8.0.0.nupkg.sha512" - }, - "Microsoft.Extensions.Options.ConfigurationExtensions/8.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-0f4DMRqEd50zQh+UyJc+/HiBsZ3vhAQALgdkcQEalSH1L2isdC7Yj54M3cyo5e+BeO5fcBQ7Dxly8XiBBcvRgw==", - "path": "microsoft.extensions.options.configurationextensions/8.0.0", - "hashPath": "microsoft.extensions.options.configurationextensions.8.0.0.nupkg.sha512" - }, - "Microsoft.Extensions.Primitives/8.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==", - "path": "microsoft.extensions.primitives/8.0.0", - "hashPath": "microsoft.extensions.primitives.8.0.0.nupkg.sha512" - }, - "Scrutor/4.2.2": { - "type": "package", - "serviceable": true, - "sha512": "sha512-t5VIYA7WJXoJJo7s4DoHakMGwTu+MeEnZumMOhTCH7kz9xWha24G7dJNxWrHPlu0ZdZAS4jDZCxxAnyaBh7uYw==", - "path": "scrutor/4.2.2", - "hashPath": "scrutor.4.2.2.nupkg.sha512" - }, - "Serilog/3.1.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-P6G4/4Kt9bT635bhuwdXlJ2SCqqn2nhh4gqFqQueCOr9bK/e7W9ll/IoX1Ter948cV2Z/5+5v8pAfJYUISY03A==", - "path": "serilog/3.1.1", - "hashPath": "serilog.3.1.1.nupkg.sha512" - }, - "Serilog.Extensions.Logging/8.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-YEAMWu1UnWgf1c1KP85l1SgXGfiVo0Rz6x08pCiPOIBt2Qe18tcZLvdBUuV5o1QHvrs8FAry9wTIhgBRtjIlEg==", - "path": "serilog.extensions.logging/8.0.0", - "hashPath": "serilog.extensions.logging.8.0.0.nupkg.sha512" - }, - "Serilog.Sinks.Console/5.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-IZ6bn79k+3SRXOBpwSOClUHikSkp2toGPCZ0teUkscv4dpDg9E2R2xVsNkLmwddE4OpNVO3N0xiYsAH556vN8Q==", - "path": "serilog.sinks.console/5.0.0", - "hashPath": "serilog.sinks.console.5.0.0.nupkg.sha512" - }, - "Serilog.Sinks.File/5.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-uwV5hdhWPwUH1szhO8PJpFiahqXmzPzJT/sOijH/kFgUx+cyoDTMM8MHD0adw9+Iem6itoibbUXHYslzXsLEAg==", - "path": "serilog.sinks.file/5.0.0", - "hashPath": "serilog.sinks.file.5.0.0.nupkg.sha512" - }, - "System.Buffers/4.5.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==", - "path": "system.buffers/4.5.1", - "hashPath": "system.buffers.4.5.1.nupkg.sha512" - }, - "System.Data.DataSetExtensions/4.5.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-221clPs1445HkTBZPL+K9sDBdJRB8UN8rgjO3ztB0CQ26z//fmJXtlsr6whGatscsKGBrhJl5bwJuKSA8mwFOw==", - "path": "system.data.datasetextensions/4.5.0", - "hashPath": "system.data.datasetextensions.4.5.0.nupkg.sha512" - }, - "System.Diagnostics.DiagnosticSource/8.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-c9xLpVz6PL9lp/djOWtk5KPDZq3cSYpmXoJQY524EOtuFl5z9ZtsotpsyrDW40U1DRnQSYvcPKEUV0X//u6gkQ==", - "path": "system.diagnostics.diagnosticsource/8.0.0", - "hashPath": "system.diagnostics.diagnosticsource.8.0.0.nupkg.sha512" - }, - "System.Diagnostics.EventLog/8.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-fdYxcRjQqTTacKId/2IECojlDSFvp7LP5N78+0z/xH7v/Tuw5ZAxu23Y6PTCRinqyu2ePx+Gn1098NC6jM6d+A==", - "path": "system.diagnostics.eventlog/8.0.0", - "hashPath": "system.diagnostics.eventlog.8.0.0.nupkg.sha512" - }, - "System.Memory/4.5.4": { - "type": "package", - "serviceable": true, - "sha512": "sha512-1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==", - "path": "system.memory/4.5.4", - "hashPath": "system.memory.4.5.4.nupkg.sha512" - }, - "System.Runtime.CompilerServices.Unsafe/6.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==", - "path": "system.runtime.compilerservices.unsafe/6.0.0", - "hashPath": "system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512" - }, - "System.Text.Encodings.Web/8.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==", - "path": "system.text.encodings.web/8.0.0", - "hashPath": "system.text.encodings.web.8.0.0.nupkg.sha512" - }, - "System.Text.Json/8.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-OdrZO2WjkiEG6ajEFRABTRCi/wuXQPxeV6g8xvUJqdxMvvuCCEk86zPla8UiIQJz3durtUEbNyY/3lIhS0yZvQ==", - "path": "system.text.json/8.0.0", - "hashPath": "system.text.json.8.0.0.nupkg.sha512" - } - } -} \ No newline at end of file diff --git a/thirdparty/MenuManagerApi/MenuManagerApi.dll b/thirdparty/MenuManagerApi/MenuManagerApi.dll deleted file mode 100644 index 877525d22031a3807f5398b15f4f23ce316c87e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5120 zcmeHKU2Ggz6+Scjla1rJ_ByEo1enw*ZPPNbfnql>H|`Nm%dc0Ko#LTcV@if zqzMS|Qq*hTZ_eL6_ndR@ow-~7+;=HKL`n3kSBYN0lUq*W&0!nrp^v{fM8Dks>aiD; z%dZ}*u9}|Kb)B|rbhL(H+m5f*h358b&9t@Rd`0UxO`#t=IB-04y)aF5SxL~>E`0f= zXtp=#Htm2iPBaKfI*?{h;HjbK(20g6tp;(kfa8~K8wfeK1g(69P5Hn73|SVT{pK#B zc_wm14|5@|Z7V?-FW*U2y;gTKUL(rH^cnCMW4!K*O&|P`0RVI|*D!8yvS~ysy6d?O za5ArHuE9mSiiymt^qNx}w$+wX|H;zrE6fI~(n+RNC;eXMl zDwn2|a5TrVep(;bC&woz&a$%DUMyK&?}&M z>BeTSl!|!%5&Vx4*w~ci)WLIuE9Ie&676T^AIc=%8pO`2!!_*-`z?4LMCX{ee4HP~ zq8(L(T+?JI&#Gy9MdJ792kI@f1CunpMt@V%^b4g5?For*64OaZe@WsqQc{v*p9Bt& zlK2yB6gmmoReSLB66iGDr=FA(^TKl+3O$7^N7WXm!hZXAPNHa$;5YLg?Qvn zYL)LFp8!8XzXgubAAon$Ftn3& z9C$yS1QzH4;HRa$0?g4G%_;?I(6^LrNhh~C`*=&D67e^MhUmDl)t@EBFd9+$hHpCd z$^<=7cA7m)T%dx}vwh+6AzBlaRm1J-`Gpd#8&*#&FOzTjmY~X(=ZlWM2vf5oXjb@T zVfU(A-CcUdaT~&C!JOD&Wnb{#Gw21!6;u@UUb}77Es^&TLA~b-%6p#Z)UB;5Pu&;K z*FDD)eoRs|+_vy%@U;*dj=R=3jXcblmRJ(5hm@~Zmh6_}b_}kEVcpQG;Mgs*-E*Z~ z-^rqARg4xAUPKYSzP#Xcx~3(K7lmbPN-Cz0B3p1#{)XQlIM=f*E(7M{cY9wEjbP7) zz13HQiy`H{SvM`yk7@U=m>%Yb_ayP+lnvWx3pd|2sl+@Jd*yo5vchGjX}i~5;(^ zEs;GtbU1rn$>sw*psBl(Q7s92WH7EjC`Uvxjv<>*Ys$!AHV;P4<}>`o;Px^8kW|%M zA99WEoMTUKHbj??Np;nAHarD(`{YaLyh2Cxx#=pOub{?$Ioo z9xwVFPHKinXs{SnXo%|=+lw@yP)fcM@TtWt6Zrb$kEC2OL`8)zV8vFQrq=UBQ*&%< zOT$Ulc!O>jZc}UUNr_IxJsRI4S>F`vxa4$&j@VP2At8|iGGPe=fBoHaq?8x9+>fFk z#ogv;OwTFvd-M+UC!l*Grh_QBCNdGW#Y(aAiN~K7rNu{bFTVE9-QP_A>{0enI9I#k z;iXiYGaG9&&SuSXdU$u%T+wyBTA?D}!L?Xr;xrCw&8a_9lSQi8!bc&m(d*r2ohlde zr|!Lv!uj7g7tYT)-n((i9C~N7_xH_-pZ+Dhzj4Uw34q4b^)0&R1)60nc+s-ThG|pB zYhd+-d|j~i>h16$Z_L+w`9SjjT>(Wd{1L*%a8Hwmjc|;wld~EBc6c~P^e!K~u)V9E z2DL;LS_V$jBB&C6Y0ZHz0cV0=UG(eZTmKC1I()LY1AsAoO+6}0odMqhv*clGO8tx+A4Oh-*24{vGghJM8#wCs>Zco-5@`TO09NvB+;WpH5BK@~=0dJ8{QX=rVk?r3bD= z7d7Av+O!JqBws^wa=!Uc&Q<35qP&?4D)yhw8`OOP{v1TpL(TkH^n`lfyzb-p?W54% w@z++ZUo*lzoa>v%>Ui*s3lyT?LS{D}!}WfjH7)o}eCXW!Ebb4&{hw6eU-X~rumAu6 diff --git a/thirdparty/MenuManagerApi/MenuManagerApi.pdb b/thirdparty/MenuManagerApi/MenuManagerApi.pdb deleted file mode 100644 index 9e565fd3a81501d0dfe0d9fe1d3902e34d51ed00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12984 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 oQ_Q;KcS_b!c&d+u)3Dc~LnAbQiEV Date: Sun, 27 Jul 2025 02:28:53 +0100 Subject: [PATCH 3/3] UniversalMenu.Compat.CS2MenuManager: Added a note regarding the public API --- .../NotSupported.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/UniversalMenu.Compat.CS2MenuManager/NotSupported.cs b/src/UniversalMenu.Compat.CS2MenuManager/NotSupported.cs index bec38fd..fb5597b 100644 --- a/src/UniversalMenu.Compat.CS2MenuManager/NotSupported.cs +++ b/src/UniversalMenu.Compat.CS2MenuManager/NotSupported.cs @@ -1,3 +1,15 @@ +// This file represents the unsupported or unimplemented shared public API of CS2MenuManager.dll +// that plugins link to. +// +// As you may be able to tell, the authors of CS2MenuManager did not separate the public API +// consumers (plugins) use and the internal API used by the CS2MenuManager project itself, +// causing the surface area to become quite large. Most of it does not need to be implemented, +// only the parts that plugins directly use. +// +// Methods that throw a NotImplementedException have yet to be implemented or triaged. +// Methods that throw NotSupportedException will never be implemented by this project and +// are provided only for binary compatibility. + using System; using System.Collections.Generic; using System.Drawing;