Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion VIPCore/VIPCore/Cfg.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public class CoreConfig
{
public int TimeMode { get; init; } = 0;
public int ServerId { get; init; } = 0;
public bool UseCenterHtmlMenu { get; init; } = true;
public string MenuType { get; set; } = "screen";
[JsonPropertyName("ServerIP")] public string ServerIp { get; init; } = "0.0.0.0";
public int ServerPort { get; init; } = 27015;

Expand Down
108 changes: 103 additions & 5 deletions VIPCore/VIPCore/VIPCore.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
using CounterStrikeSharp.API.Modules.Cvars;
using CounterStrikeSharp.API.Modules.Entities;
using CounterStrikeSharp.API.Modules.Timers;
using CS2ScreenMenuAPI;
using CS2ScreenMenuAPI.Internal;
using Microsoft.Extensions.Logging;
using MySqlConnector;
using VipCoreApi;
Expand Down Expand Up @@ -59,7 +61,25 @@ public override void Load(bool hotReload)
RegisterEventHandlers();
SetupTimers();

AddCommand("css_vip", "command that opens the VIP MENU", (player, _) => CreateMenu(player));
AddCommand("css_vip", "command that opens the VIP MENU", (player, _) =>
{
switch (CoreConfig.MenuType)
{
case "html":
case "center":
CreateHtmlMenu(player);
break;

case "screen":
case "worldtext":
CreateScreenMenu(player);
break;

default:
Logger.LogError($"Invalid menu type: {CoreConfig.MenuType}. Please choose between: [html, center, screen]");
break;
}
});
}

private void LoadConfig()
Expand Down Expand Up @@ -373,8 +393,86 @@ public void OnCommandReloadConfig(CCSPlayerController? controller, CommandInfo c

ReplyToCommand(controller, msg);
}
private void CreateScreenMenu(CCSPlayerController? player)
{
if (player == null)
return;

if (!IsClientVip[player.Slot])
{
PrintToChat(player, Localizer["vip.NoAcces"]);
return;
}

private void CreateMenu(CCSPlayerController? player)
if (!Users.TryGetValue(player.SteamID, out var user))
return;

ScreenMenu menu = VipApi.CreateScreenMenu(Localizer["menu.Title", user.group]);

if (Config.Groups.TryGetValue(user.group, out var vipGroup))
{
var sortedFeatures = Features
.Where(setting => setting.Value.FeatureType is not FeatureType.Hide)
.OrderBy(setting => Array.IndexOf(_sortedItems, setting.Key))
.ThenBy(setting => setting.Key);

foreach (var (key, feature) in sortedFeatures)
{
if (!vipGroup.Values.TryGetValue(key, out var featureValue)) continue;
if (string.IsNullOrEmpty(featureValue.ToString())) continue;
if (!user.FeatureState.TryGetValue(key, out var currentState)) continue;

string icon = string.Empty;
if (feature.FeatureType == FeatureType.Toggle)
{
icon = currentState switch
{
FeatureState.Enabled => "[✔]",
FeatureState.Disabled => "[✘]",
FeatureState.NoAccess => "[✘]",
_ => ""
};
}

string optionText = Localizer[key] + (feature.FeatureType == FeatureType.Selectable ? string.Empty : $" {icon}");

menu.AddOption(optionText, (p, option) =>
{
var state = user.FeatureState[key];
var result = VipApi.PlayerUseFeature(player, key, state, feature.FeatureType);

if (feature.FeatureType == FeatureType.Toggle)
{
var newState = state switch
{
FeatureState.Enabled => FeatureState.Disabled,
FeatureState.Disabled => FeatureState.Enabled,
_ => state
};
user.FeatureState[key] = newState;

var newIcon = newState switch
{
FeatureState.Enabled => "[✔]",
FeatureState.Disabled => "[✘]",
_ => "[✘]"
};

option.Text = Localizer[key] + $" {newIcon}";
MenuAPI.GetActiveMenu(player)?.Display();

VipApi.PrintToChat(player,
$"{Localizer[key]}: {(newState == FeatureState.Enabled ? $"{Localizer["chat.Enabled"]}" : $"{Localizer["chat.Disabled"]}")}");

feature.OnSelectItem?.Invoke(p, newState);
}
}, currentState == FeatureState.NoAccess || ForcedDisabledFeatures.Contains(key));
}
}
MenuAPI.OpenMenu(this, player, menu);

}
private void CreateHtmlMenu(CCSPlayerController? player)
{
if (player == null) return;

Expand All @@ -386,7 +484,7 @@ private void CreateMenu(CCSPlayerController? player)

if (!Users.TryGetValue(player.SteamID, out var user)) return;

var menu = VipApi.CreateMenu(Localizer["menu.Title", user.group]);
var menu = VipApi.CreateHtmlMenu(Localizer["menu.Title", user.group]);
if (Config.Groups.TryGetValue(user.group, out var vipGroup))
{
var sortedFeatures = Features.Where(setting => setting.Value.FeatureType is not FeatureType.Hide)
Expand Down Expand Up @@ -423,7 +521,7 @@ private void CreateMenu(CCSPlayerController? player)

if (result == HookResult.Handled || result == HookResult.Stop)
{
CreateMenu(player);
CreateHtmlMenu(player);
return;
}

Expand All @@ -446,7 +544,7 @@ private void CreateMenu(CCSPlayerController? player)

if (CoreConfig.ReOpenMenuAfterItemClick && featureType != FeatureType.Selectable)
{
CreateMenu(controller);
CreateHtmlMenu(controller);
}
}, featureState == FeatureState.NoAccess || ForcedDisabledFeatures.Contains(key));
}
Expand Down
1 change: 1 addition & 0 deletions VIPCore/VIPCore/VIPCore.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

<ItemGroup>
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.304" />
<PackageReference Include="CS2ScreenMenuAPI" Version="2.7.0" />
<PackageReference Include="Dapper" Version="2.1.21" />
<PackageReference Include="Microsoft.Extensions.Localization" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" />
Expand Down
12 changes: 8 additions & 4 deletions VIPCore/VIPCore/VipCoreApi.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using CounterStrikeSharp.API.Modules.Cvars;
using CounterStrikeSharp.API.Modules.Entities;
using CounterStrikeSharp.API.Modules.Menu;
using CS2ScreenMenuAPI.Internal;
using Microsoft.Extensions.Logging;
using VipCoreApi;
using static VipCoreApi.IVipCoreApi;
Expand Down Expand Up @@ -365,7 +366,7 @@ public T LoadConfig<T>(string name, string path)
File.WriteAllText(configFilePath,
JsonSerializer.Serialize(defaultConfig,
new JsonSerializerOptions
{ WriteIndented = true, ReadCommentHandling = JsonCommentHandling.Skip }));
{ WriteIndented = true, ReadCommentHandling = JsonCommentHandling.Skip }));
return defaultConfig;
}

Expand All @@ -383,11 +384,14 @@ public T LoadConfig<T>(string name)
return LoadConfig<T>(name, ModulesConfigDirectory);
}

public IMenu CreateMenu(string title)
public IMenu CreateHtmlMenu(string title)
{
return _vipCore.CoreConfig.UseCenterHtmlMenu ? new CenterHtmlMenu(title, _vipCore) : new ChatMenu(title);
return new CenterHtmlMenu(title, _vipCore);
}
public ScreenMenu CreateScreenMenu(string title)
{
return new ScreenMenu(title, _vipCore);
}

public void SetPlayerCookie<T>(ulong steamId64, string key, T value)
{
if (!_playersCookie.TryGetValue(steamId64, out var cookie))
Expand Down
18 changes: 13 additions & 5 deletions VIPCore/VipCoreApi/IVipCoreApi.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Menu;
using CS2ScreenMenuAPI.Internal;

namespace VipCoreApi;

Expand Down Expand Up @@ -80,12 +81,12 @@ enum FeatureType
/// <param name="feature"></param>
/// <param name="newState"></param>
void SetPlayerFeatureState(CCSPlayerController player, string feature, FeatureState newState);

/// <summary>
/// Turns off all functions
/// </summary>
void DisableAllFeatures();

/// /// <summary>
/// Turns on all the functions
/// </summary>
Expand Down Expand Up @@ -228,14 +229,21 @@ enum FeatureType
/// <returns></returns>
T LoadConfig<T>(string name);


/// <summary>
/// Returns an HTML menu.
/// </summary>
/// <param name="title"></param>
/// <returns></returns>
IMenu CreateHtmlMenu(string title);

/// <summary>
/// Returns a menu depending on the UseCenterHtmlMenu parameter from the config.
/// Returns a screen menu.
/// </summary>
/// <param name="title"></param>
/// <returns></returns>
IMenu CreateMenu(string title);
ScreenMenu CreateScreenMenu(string title);


/// <summary>
/// Returns server id
/// </summary>
Expand Down
8 changes: 5 additions & 3 deletions VIPCore/VipCoreApi/IVipFeature.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Menu;
using CS2ScreenMenuAPI.Internal;
using static VipCoreApi.IVipCoreApi;

namespace VipCoreApi;
Expand All @@ -23,7 +24,7 @@ public abstract class VipFeatureBase : IVipFeature
public string ModulesConfigDirectory => Api.ModulesConfigDirectory;

public string GetDatabaseConnectionString => Api.GetDatabaseConnectionString;

protected VipFeatureBase(IVipCoreApi api)
{
Api = api;
Expand All @@ -44,7 +45,7 @@ public virtual void OnPlayerLoaded(CCSPlayerController player, string group)
public virtual void OnPlayerRemoved(CCSPlayerController player, string group)
{
}

public virtual void OnSelectItem(CCSPlayerController player, FeatureState state)
{
}
Expand Down Expand Up @@ -91,7 +92,8 @@ public void GiveClientTemporaryVip(CCSPlayerController player, string group, int

public T LoadConfig<T>(string name) => Api.LoadConfig<T>(name);

public IMenu CreateMenu(string title) => Api.CreateMenu(title);
public IMenu CreatHtmlMenu(string title) => Api.CreateHtmlMenu(title);
public ScreenMenu CreateScreenMenu(string title) => Api.CreateScreenMenu(title);

public void PrintToChat(CCSPlayerController player, string message) => Api.PrintToChat(player, message);

Expand Down
1 change: 1 addition & 0 deletions VIPCore/VipCoreApi/VipCoreApi.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

<ItemGroup>
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.304" />
<PackageReference Include="CS2ScreenMenuAPI" Version="2.7.0" />
</ItemGroup>

</Project>