@@ -42,6 +42,7 @@ public void OpenManageMenu(IPlayer admin)
4242 {
4343 var localizer = core . Translation . GetPlayerLocalizer ( admin ) ;
4444 var builder = core . MenusAPI . CreateBuilder ( ) ;
45+ builder . SetPlayerFrozen ( coreConfig . FreezeAdminMenu ) ;
4546 builder . Design . SetMenuTitle ( localizer [ "manage.Title" ] ) ;
4647
4748 var addOption = new ButtonMenuOption ( localizer [ "manage.AddVipUser" ] ) ;
@@ -63,7 +64,7 @@ public void OpenManageMenu(IPlayer admin)
6364 {
6465 var users = await userRepository . GetAllUsersAsync ( serverIdentifier . ServerId ) ;
6566 var userList = users . ToList ( ) ;
66- core . Scheduler . NextTick ( ( ) => OpenManageUsersListMenu ( args . Player , userList ) ) ;
67+ core . Scheduler . NextTick ( ( ) => OpenManageGroupsMenu ( args . Player , userList ) ) ;
6768 }
6869 catch ( Exception ex )
6970 {
@@ -85,6 +86,7 @@ private void OpenAddVipSelectPlayerMenu(IPlayer admin)
8586 {
8687 var localizer = core . Translation . GetPlayerLocalizer ( admin ) ;
8788 var builder = core . MenusAPI . CreateBuilder ( ) ;
89+ builder . SetPlayerFrozen ( coreConfig . FreezeAdminMenu ) ;
8890 builder . Design . SetMenuTitle ( localizer [ "manage.SelectPlayer" ] ) ;
8991
9092 for ( var i = 0 ; i < core . PlayerManager . PlayerCap ; i ++ )
@@ -112,6 +114,7 @@ private void OpenAddVipSelectGroupMenu(IPlayer admin, long steamId, string playe
112114 {
113115 var localizer = core . Translation . GetPlayerLocalizer ( admin ) ;
114116 var builder = core . MenusAPI . CreateBuilder ( ) ;
117+ builder . SetPlayerFrozen ( coreConfig . FreezeAdminMenu ) ;
115118 builder . Design . SetMenuTitle ( localizer [ "manage.SelectGroup" , playerName ] ) ;
116119
117120 foreach ( var groupName in groupsConfig . Groups . Keys )
@@ -134,6 +137,7 @@ private void OpenAddVipSelectTimeMenu(IPlayer admin, long steamId, string player
134137 {
135138 var localizer = core . Translation . GetPlayerLocalizer ( admin ) ;
136139 var builder = core . MenusAPI . CreateBuilder ( ) ;
140+ builder . SetPlayerFrozen ( coreConfig . FreezeAdminMenu ) ;
137141
138142 var timeModeLabel = localizer [ GetTimeModeKey ( coreConfig . TimeMode ) ] ;
139143 builder . Design . SetMenuTitle ( localizer [ "manage.SelectDuration" , timeModeLabel , playerName ] ) ;
@@ -231,10 +235,36 @@ private void OpenAddVipSelectTimeMenu(IPlayer admin, long steamId, string player
231235 core . MenusAPI . OpenMenuForPlayer ( admin , menu ) ;
232236 }
233237
238+ private void OpenManageGroupsMenu ( IPlayer admin , List < User > users )
239+ {
240+ var localizer = core . Translation . GetPlayerLocalizer ( admin ) ;
241+ var builder = core . MenusAPI . CreateBuilder ( ) ;
242+ builder . SetPlayerFrozen ( coreConfig . FreezeAdminMenu ) ;
243+ builder . Design . SetMenuTitle ( localizer [ "manage.VipGroups" ] ) ;
244+
245+ foreach ( var groupName in groupsConfig . Groups . Keys )
246+ {
247+ var group = groupName ;
248+ var groupUsers = users . Where ( u => string . Equals ( u . group , group , StringComparison . OrdinalIgnoreCase ) ) . ToList ( ) ;
249+ var playerCount = groupUsers . Select ( u => u . account_id ) . Distinct ( ) . Count ( ) ;
250+ var option = new ButtonMenuOption ( localizer [ "manage.GroupEntry" , group , playerCount ] ) ;
251+ option . Click += async ( sender , args ) =>
252+ {
253+ core . Scheduler . NextTick ( ( ) => OpenManageUsersListMenu ( args . Player , groupUsers ) ) ;
254+ await ValueTask . CompletedTask ;
255+ } ;
256+ builder . AddOption ( option ) ;
257+ }
258+
259+ var menu = builder . Build ( ) ;
260+ core . MenusAPI . OpenMenuForPlayer ( admin , menu ) ;
261+ }
262+
234263 private void OpenManageUsersListMenu ( IPlayer admin , List < User > users )
235264 {
236265 var localizer = core . Translation . GetPlayerLocalizer ( admin ) ;
237266 var builder = core . MenusAPI . CreateBuilder ( ) ;
267+ builder . SetPlayerFrozen ( coreConfig . FreezeAdminMenu ) ;
238268 builder . Design . SetMenuTitle ( localizer [ "manage.ManageUsersList" ] ) ;
239269
240270 if ( users . Count == 0 )
@@ -267,6 +297,7 @@ private void OpenUserManageMenu(IPlayer admin, List<User> playerUsers)
267297 {
268298 var localizer = core . Translation . GetPlayerLocalizer ( admin ) ;
269299 var builder = core . MenusAPI . CreateBuilder ( ) ;
300+ builder . SetPlayerFrozen ( coreConfig . FreezeAdminMenu ) ;
270301 var first = playerUsers . First ( ) ;
271302
272303 builder . Design . SetMenuTitle ( localizer [ "manage.UserDetail" , first . name ] ) ;
@@ -332,6 +363,7 @@ private void OpenGroupManageMenu(IPlayer admin, User user, List<User> allPlayerG
332363 {
333364 var localizer = core . Translation . GetPlayerLocalizer ( admin ) ;
334365 var builder = core . MenusAPI . CreateBuilder ( ) ;
366+ builder . SetPlayerFrozen ( coreConfig . FreezeAdminMenu ) ;
335367
336368 var expiresText = user . expires == 0 ? localizer [ "manage.Permanent" ] : DateTimeOffset . FromUnixTimeSeconds ( user . expires ) . ToString ( "yyyy-MM-dd HH:mm" ) ;
337369 builder . Design . SetMenuTitle ( localizer [ "manage.UserDetail" , $ "{ user . name } - { user . group } "] ) ;
@@ -391,6 +423,7 @@ private void OpenAddGroupMenu(IPlayer admin, long accountId, string playerName,
391423 {
392424 var localizer = core . Translation . GetPlayerLocalizer ( admin ) ;
393425 var builder = core . MenusAPI . CreateBuilder ( ) ;
426+ builder . SetPlayerFrozen ( coreConfig . FreezeAdminMenu ) ;
394427 builder . Design . SetMenuTitle ( localizer [ "manage.SelectGroup" , playerName ] ) ;
395428
396429 var existingGroupNames = existingGroups . Select ( u => u . group ) . ToHashSet ( StringComparer . OrdinalIgnoreCase ) ;
@@ -417,6 +450,7 @@ private void OpenExtendDurationMenu(IPlayer admin, User user)
417450 {
418451 var localizer = core . Translation . GetPlayerLocalizer ( admin ) ;
419452 var builder = core . MenusAPI . CreateBuilder ( ) ;
453+ builder . SetPlayerFrozen ( coreConfig . FreezeAdminMenu ) ;
420454
421455 var timeModeLabel = localizer [ GetTimeModeKey ( coreConfig . TimeMode ) ] ;
422456 builder . Design . SetMenuTitle ( localizer [ "manage.ExtendTitle" , user . name , timeModeLabel ] ) ;
0 commit comments