CS2MenuManager 1.0.32

There is a newer version of this package available.
See the version list below for details.
dotnet add package CS2MenuManager --version 1.0.32
                    
NuGet\Install-Package CS2MenuManager -Version 1.0.32
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="CS2MenuManager" Version="1.0.32" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="CS2MenuManager" Version="1.0.32" />
                    
Directory.Packages.props
<PackageReference Include="CS2MenuManager" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add CS2MenuManager --version 1.0.32
                    
#r "nuget: CS2MenuManager, 1.0.32"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#addin nuget:?package=CS2MenuManager&version=1.0.32
                    
Install CS2MenuManager as a Cake Addin
#tool nuget:?package=CS2MenuManager&version=1.0.32
                    
Install CS2MenuManager as a Cake Tool

CS2MenuManager is a modern, extensible and easy to use menu system for Counter-Strike 2 based on the CounterStrikeSharp library. It provides server administrators and developers with powerful tools to create interactive and customisable menu interfaces. Designed for both ease of use and flexibility, it provides intuitive controls for players and easy configuration for administrators.

If you would like to donate or need assistance with the plugin, feel free to contact me via Discord, either privately or on my server.

Discord nickname: schwarper

Discord link : Discord server

You can buy me a coffee

Nuget

NuGet Badge NuGet-Badge

Installation

  1. Download:
  1. Install the files:
  • Extract the contents of the downloaded ZIP file to the addons/counterstrikesharp/ folder.
  1. Configure the settings:
  • Adjust the settings in the config.toml file in the addons/counterstrikesharp/shared/CS2MenuManager/ directory.
  1. Restart server:
  • Restart your server for the changes to take effect. You will need to use this API in your plugins.

Creating Menus

You can create any type of menu. All menu types have a similar structure. Here's an example of how to create a Chat Menu:

Supported menus: ChatMenu, ConsoleMenu, CenterHtmlMenu, WasdMenu, ScreenMenu, PanoramaVote, PlayerMenu

ChatMenu menu = new("Title", this);

menu.AddItem("Option 1", (p, o) =>
{
    p.PrintToChat("You selected option 1");
});

menu.AddItem("Option 2X", DisableOption.DisableShowNumber);
menu.AddItem("Option 3X", DisableOption.DisableHideNumber);

menu.Display(player);

Adding Submenus

You can add submenus to any menu. Here's how to link a submenu:

menu.PrevMenu = AnySubMenu();

private static CenterHtmlMenu AnySubMenu()
{
    CenterHtmlMenu menu = new("Title", this);
    //...
    return menu;
}

Post-Select Actions

You can set the behavior after selecting an option using PostSelectAction. The default is to close the menu after selection.

menu.AddItem("Option After Reset", (p, o) =>
{
    o.PostSelectAction = PostSelectAction.Reset;
});

Setting Menu Time

You can set the time for the menu. When the time is up, the menu is automatically closed.

menu.Display(menu, 10);
// OR
ConsoleMenu menu = new("Console Menu", this)
{
    MenuTime = 20
};

Creating and opening the menu selected by the player

The title may not be very descriptive. You can use the PlayerMenu class to show the player the menu that the player has chosen. In other words, the player chooses which menu to open. He can do this with !mm or the command you set. You need to have the CS2MenuManager_MenuManager plugin installed and a database connection.

PlayerMenu menu = new(Localizer.ForPlayer(player, "MenuManager Title"), this);

menu.AddItem(Localizer.ForPlayer(player, "Change Resolution"), (p, o) =>
{
    ResolutionManager.ResolutionMenuByType(typeof(PlayerMenu), player, this, menu)
        .Display(player, 0);
});

menu.AddItem(Localizer.ForPlayer(player, "Change Menu Type"), (p, o) =>
{
    MenuTypeManager.MenuTypeMenuByType(typeof(PlayerMenu), player, this, menu)
        .Display(player, 0);
});

menu.Display(player, 0);

Panorama Vote Menu

The PanoramaVote menu allows you to create interactive vote menus using the Panorama UI. Here's an example:

var menu = new PanoramaVote("#SFUI_vote_panorama_vote_default", "Hold on, Let me Cook", VoteResultCallback, VoteHandlerCallback, this)
{
    VoteCaller = player // null is the server.
};

menu.DisplayVoteToAll(20);

And callbacks

public bool VoteResultCallback(YesNoVoteInfo info)
{
    /*
    public int TotalVotes;
    public int YesVotes;
    public int NoVotes;
    public int TotalClients;
    public Dictionary<int, (int, int)> ClientInfo = [];
    */

    if (info.YesVotes > info.NoVotes)
    {
        Server.PrintToChatAll("Vote passed!");
        return true;
    }
    
    Server.PrintToChatAll("Vote failed!");
    return false;
}

public void VoteHandlerCallback(YesNoVoteAction action, int param1, CastVote param2)
{
    switch (action)
    {
        case YesNoVoteAction.VoteAction_Start:
            Server.PrintToChatAll("Vote started!");
            break;

        case YesNoVoteAction.VoteAction_Vote:
            var player = Utilities.GetPlayerFromSlot(param1);
            if (player == null) return;
            player.PrintToChat("You voted: " + (param2 == CastVote.VOTE_OPTION1 ? "Yes" : "No"));
            break;

        case YesNoVoteAction.VoteAction_End:
            switch ((YesNoVoteEndReason)param1)
            {
                case YesNoVoteEndReason.VoteEnd_Cancelled:
                    Server.PrintToChatAll("Vote Ended! Cancelled");
                    break;
                case YesNoVoteEndReason.VoteEnd_AllVotes:
                    Server.PrintToChatAll("Vote Ended! Thank you for participating.");
                    break;
                case YesNoVoteEndReason.VoteEnd_TimeUp:
                    Server.PrintToChatAll("Vote Ended! Time is up.");
                    break;
            }
            break;
    }
}

References

This project was prepared with the help of the following sources.

Images

Chat Menu

Chat Menu

Console Menu

Console Menu

CenterHtmlMenu

CenterHtmlMenu

Wasd Menu

Wasd Menu

Screen Menu

Screen Menu

Screen Menu

Panorama Vote

Screen Menu

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.0.35 132 6/3/2025
1.0.34 108 5/31/2025
1.0.33 84 5/24/2025
1.0.32 255 5/15/2025
1.0.31 219 5/15/2025
1.0.30 263 5/12/2025
1.0.29 181 5/7/2025
1.0.28 333 4/2/2025
1.0.27 200 3/31/2025
1.0.26 184 3/30/2025
1.0.25 134 3/29/2025
1.0.24 94 3/29/2025
1.0.23 109 3/29/2025
1.0.22 141 3/27/2025
1.0.21 125 3/26/2025
1.0.20 126 3/26/2025
1.0.19 473 3/25/2025
1.0.18 472 3/25/2025
1.0.17 420 3/24/2025
1.0.11 153 3/22/2025
1.0.10 80 3/22/2025
1.0.9 70 3/22/2025
1.0.8 64 3/22/2025
1.0.7 71 3/22/2025
1.0.6 142 3/20/2025
1.0.5 142 3/20/2025
1.0.4 142 3/20/2025
1.0.3 138 3/20/2025
1.0.2 145 3/20/2025
1.0.1 151 3/20/2025