Skip to content

Commit afc2f61

Browse files
committed
Add menu freeze flags and VIP groups menu
1 parent 9e2150f commit afc2f61

4 files changed

Lines changed: 40 additions & 1 deletion

File tree

VIPCore/resources/translations/en.jsonc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
"manage.SelectPlayer": "[[blue]Add VIP - Select Player[default]]",
1919
"manage.SelectGroup": "[[blue]Add VIP - Select Group for {0}[default]]",
2020
"manage.SelectDuration": "[[blue]Add VIP - Duration ({0}) for {1}[default]]",
21+
"manage.VipGroups": "[[blue]VIP Groups[default]]",
22+
"manage.GroupEntry": "{0} ({1} players)",
2123
"manage.ManageUsersList": "[[blue]Manage VIP Users[default]]",
2224
"manage.NoVipUsers": "No VIP users found.",
2325
"manage.UserEntry": "{0} ({1}) [{2}]",

VIPCore/src/Config/ConfigModels.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ public class VipConfig
88
public int TimeMode { get; set; } = 0;
99
public bool VipLogging { get; set; } = true;
1010
public int? ServerId { get; set; } = null;
11+
public bool FreezeMenu { get; set; } = false;
12+
public bool FreezeAdminMenu { get; set; } = false;
1113
}
1214

1315
public class GroupsConfig

VIPCore/src/Services/ManageMenuService.cs

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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]);

VIPCore/src/Services/MenuService.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public void OpenVipMenu(IPlayer player, VipUser user, int? selectedIndex = null)
3333

3434
var builder = core.MenusAPI.CreateBuilder();
3535
builder.Design.SetMenuTitle(title);
36+
builder.SetPlayerFrozen(config.FreezeMenu);
3637

3738
var groupName = groupsConfig.Groups.Keys.FirstOrDefault(k => k.Equals(user.group, StringComparison.OrdinalIgnoreCase));
3839
if (groupName == null || !groupsConfig.Groups.TryGetValue(groupName, out var groupConfig))

0 commit comments

Comments
 (0)