Skip to content

Commit 4777c7e

Browse files
authored
First release
0 parents  commit 4777c7e

File tree

9 files changed

+258
-0
lines changed

9 files changed

+258
-0
lines changed

AnyBaseLib.dll

11.5 KB
Binary file not shown.

PlayerSettings.sln

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
# Visual Studio Version 17
4+
VisualStudioVersion = 17.9.34616.47
5+
MinimumVisualStudioVersion = 10.0.40219.1
6+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PlayerSettings", "PlayerSettings\PlayerSettings.csproj", "{A3C30B17-9E3D-4CA3-81E0-91B1EBFEEB6C}"
7+
EndProject
8+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PlayerSettingsApi", "PlayerSettingsApi\PlayerSettingsApi.csproj", "{CEFCA2C1-6552-4C3C-A348-3E3D004D5D44}"
9+
EndProject
10+
Global
11+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
12+
Debug|Any CPU = Debug|Any CPU
13+
Release|Any CPU = Release|Any CPU
14+
EndGlobalSection
15+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
16+
{A3C30B17-9E3D-4CA3-81E0-91B1EBFEEB6C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
17+
{A3C30B17-9E3D-4CA3-81E0-91B1EBFEEB6C}.Debug|Any CPU.Build.0 = Debug|Any CPU
18+
{A3C30B17-9E3D-4CA3-81E0-91B1EBFEEB6C}.Release|Any CPU.ActiveCfg = Release|Any CPU
19+
{A3C30B17-9E3D-4CA3-81E0-91B1EBFEEB6C}.Release|Any CPU.Build.0 = Release|Any CPU
20+
{CEFCA2C1-6552-4C3C-A348-3E3D004D5D44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
21+
{CEFCA2C1-6552-4C3C-A348-3E3D004D5D44}.Debug|Any CPU.Build.0 = Debug|Any CPU
22+
{CEFCA2C1-6552-4C3C-A348-3E3D004D5D44}.Release|Any CPU.ActiveCfg = Release|Any CPU
23+
{CEFCA2C1-6552-4C3C-A348-3E3D004D5D44}.Release|Any CPU.Build.0 = Release|Any CPU
24+
EndGlobalSection
25+
GlobalSection(SolutionProperties) = preSolution
26+
HideSolutionNode = FALSE
27+
EndGlobalSection
28+
GlobalSection(ExtensibilityGlobals) = postSolution
29+
SolutionGuid = {7C957E67-975E-4328-B4BD-4DD82C04E59F}
30+
EndGlobalSection
31+
EndGlobal

PlayerSettings/CPlayerSettings.cs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
using CounterStrikeSharp.API.Core;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
8+
namespace PlayerSettings
9+
{
10+
internal class CPlayerSettings
11+
{
12+
private int userid;
13+
private static Dictionary<string, string> cached_values;
14+
15+
public CPlayerSettings(int _userid)
16+
{
17+
userid = _userid;
18+
cached_values = new Dictionary<string, string>();
19+
}
20+
21+
public string GetValue(string param, string default_value)
22+
{
23+
string value;
24+
if(!cached_values.TryGetValue(param, out value))
25+
{
26+
value = Storage.GetUserSettingValue(userid, param, default_value);
27+
cached_values[param] = value;
28+
}
29+
30+
return value;
31+
}
32+
33+
public void SetValue(string param, string value)
34+
{
35+
cached_values[param] = value;
36+
Storage.SetUserSettingValue(userid, param, value);
37+
}
38+
39+
public int UserId()
40+
{
41+
return userid;
42+
}
43+
44+
45+
}
46+
}

PlayerSettings/Main.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using CounterStrikeSharp.API;
2+
using CounterStrikeSharp.API.Core;
3+
using CounterStrikeSharp.API.Core.Attributes.Registration;
4+
using CounterStrikeSharp.API.Core.Capabilities;
5+
using CounterStrikeSharp.API.Modules.Commands;
6+
using CounterStrikeSharp.API.Modules.Menu;
7+
8+
9+
namespace PlayerSettings;
10+
public class PlayerSettingsCore : BasePlugin
11+
{
12+
public override string ModuleName => "PlayerSettings [Core]";
13+
public override string ModuleVersion => "0.1";
14+
public override string ModuleAuthor => "Nick Fox";
15+
public override string ModuleDescription => "One storage for player's settings (aka ClientCookies)";
16+
17+
private ISettingsApi? _api;
18+
private readonly PluginCapability<ISettingsApi?> _pluginCapability = new("settings:nfcore");
19+
public override void Load(bool hotReload)
20+
{
21+
_api = new SettingsApi();
22+
Capabilities.RegisterPluginCapability(_pluginCapability, () => _api);
23+
Storage.Init(this);
24+
}
25+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<OutputType>Library</OutputType>
5+
<TargetFramework>net8.0</TargetFramework>
6+
<ImplicitUsings>enable</ImplicitUsings>
7+
<Nullable>enable</Nullable>
8+
</PropertyGroup>
9+
10+
<ItemGroup>
11+
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.233" />
12+
</ItemGroup>
13+
14+
<ItemGroup>
15+
<ProjectReference Include="..\PlayerSettingsApi\PlayerSettingsApi.csproj" />
16+
</ItemGroup>
17+
18+
<ItemGroup>
19+
<Reference Include="AnyBaseLib">
20+
<HintPath>..\AnyBaseLib.dll</HintPath>
21+
</Reference>
22+
</ItemGroup>
23+
</Project>

PlayerSettings/SettingsApi.cs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
using CounterStrikeSharp.API.Core;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
8+
9+
namespace PlayerSettings
10+
{
11+
12+
internal class SettingsApi : ISettingsApi
13+
{
14+
List<CPlayerSettings> settings;
15+
public SettingsApi()
16+
{
17+
settings = new List<CPlayerSettings>();
18+
}
19+
20+
private CPlayerSettings FindUser(int userid)
21+
{
22+
foreach (var item in this.settings)
23+
{
24+
if (item.UserId() == userid)
25+
{
26+
return item;
27+
}
28+
}
29+
var newInst = new CPlayerSettings(userid);
30+
settings.Add(newInst);
31+
return newInst;
32+
}
33+
34+
public string GetPlayerSettingsValue(CCSPlayerController player, string param, string default_value)
35+
{
36+
return FindUser(Storage.GetUserId(player)).GetValue(param, default_value);
37+
}
38+
39+
public void SetPlayerSettingsValue(CCSPlayerController player, string param, string value)
40+
{
41+
FindUser(Storage.GetUserId(player)).SetValue(param, value);
42+
}
43+
}
44+
}

PlayerSettings/Storage.cs

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
using AnyBaseLib;
2+
using CounterStrikeSharp.API.Core;
3+
using CounterStrikeSharp.API.Modules.Entities;
4+
using System;
5+
using System.Collections.Generic;
6+
using System.Linq;
7+
using System.Net.WebSockets;
8+
using System.Runtime.CompilerServices;
9+
using System.Text;
10+
using System.Threading.Tasks;
11+
12+
namespace PlayerSettings
13+
{
14+
internal static class Storage
15+
{
16+
private static IAnyBase db;
17+
18+
public static void Init(BasePlugin plugin, string driver = "sqlite")
19+
{
20+
db = CAnyBase.Base(driver);
21+
db.Set(AnyBaseLib.Bases.CommitMode.AutoCommit, Path.Combine(plugin.ModuleDirectory,"menusets"));
22+
23+
db.Init();
24+
db.Query("create table if not exists \"users\" (\"id\" integer primary key AUTOINCREMENT, \"steam\" varchar(255) not null)", null, true);
25+
db.Query("create table if not exists \"settings\" (\"user_id\" int, \"param\" varchar(255) not null, \"value\" varchar(255) not null)", null, true);
26+
}
27+
28+
public static int GetUserId(CCSPlayerController player)
29+
{
30+
var steamid = player.SteamID;
31+
var res = db.Query("select \"id\" from users where \"steam\" = \"{ARG}\"", new List<string>([steamid.ToString()]));
32+
if(res.Count == 0)
33+
{
34+
db.Query("insert into \"users\" (\"steam\") values (\"{ARG}\")", new List<string>([steamid.ToString()]), true);
35+
res = db.Query("select \"id\" from \"users\" where \"steam\" = \"{ARG}\"", new List<string>([steamid.ToString()]));
36+
}
37+
return int.Parse(res[0][0]);
38+
}
39+
40+
public static string GetUserSettingValue(int userid, string param, string default_value)
41+
{
42+
var res = db.Query("select \"value\" from \"settings\" where \"user_id\" = {ARG} and \"param\" = \"{ARG}\"", new List<string>([userid.ToString(), param]));
43+
if (res.Count == 0)
44+
{
45+
db.Query("insert into \"settings\" (\"user_id\", \"param\",\"value\") values ({ARG},\"{ARG}\", \"{ARG}\")", new List<string>([userid.ToString(), param, default_value]), true);
46+
return default_value;
47+
}
48+
return res[0][0];
49+
}
50+
51+
public static void SetUserSettingValue(int userid, string param, string value)
52+
{
53+
db.Query("update \"settings\" set \"value\" = \"{ARG}\" where \"user_id\" = {ARG} and \"param\" = \"{ARG}\"", new List<string>([value, userid.ToString(), param]), true);
54+
}
55+
56+
57+
58+
59+
}
60+
}

PlayerSettingsApi/ISettingsApi.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using CounterStrikeSharp.API.Core;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
8+
namespace PlayerSettings
9+
{
10+
public interface ISettingsApi
11+
{
12+
public string GetPlayerSettingsValue(CCSPlayerController player, string param, string default_value);
13+
public void SetPlayerSettingsValue(CCSPlayerController player, string param, string value);
14+
}
15+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<OutputType>Library</OutputType>
5+
<TargetFramework>net8.0</TargetFramework>
6+
<ImplicitUsings>enable</ImplicitUsings>
7+
<Nullable>enable</Nullable>
8+
</PropertyGroup>
9+
10+
<ItemGroup>
11+
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.233" />
12+
</ItemGroup>
13+
14+
</Project>

0 commit comments

Comments
 (0)