Skip to content
This repository was archived by the owner on Mar 11, 2025. It is now read-only.

Commit 1089e69

Browse files
committed
Patch v1.3.1
1 parent dd1eb63 commit 1089e69

File tree

3 files changed

+56
-28
lines changed

3 files changed

+56
-28
lines changed

CHANGELOG

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
-- 2024. 05. 19 - v1.3.1
2+
3+
- feat: Added detection to know if database is used
4+
- fix: Threading issues with database
5+
16
-- 2024. 05. 18 - v1.3.0
27

38
- feat: Add configuration json file to allow players to bypass specific restrictions

src/KitsuneSteamRestrict.cs

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ public sealed class DatabaseSettings
8888
public class SteamRestrictPlugin : BasePlugin, IPluginConfig<PluginConfig>
8989
{
9090
public override string ModuleName => "Steam Restrict";
91-
public override string ModuleVersion => "1.3.0";
91+
public override string ModuleVersion => "1.3.1";
9292
public override string ModuleAuthor => "K4ryuu, Cruze @ KitsuneLab";
9393
public override string ModuleDescription => "Restrict certain players from connecting to your server.";
9494

@@ -117,8 +117,11 @@ public override void Load(bool hotReload)
117117
var bypassConfigService = new BypassConfigService(Path.Combine(ModuleDirectory, bypassConfigFilePath));
118118
_bypassConfig = bypassConfigService.LoadConfig();
119119

120-
var databaseService = new DatabaseService(Config.DatabaseSettings);
121-
_ = databaseService.EnsureTablesExistAsync();
120+
if (!IsDatabaseConfigDefault())
121+
{
122+
var databaseService = new DatabaseService(Config.DatabaseSettings);
123+
_ = databaseService.EnsureTablesExistAsync();
124+
}
122125

123126
RegisterListener<Listeners.OnGameServerSteamAPIActivated>(() => { g_bSteamAPIActivated = true; });
124127
RegisterListener<Listeners.OnClientConnect>((int slot, string name, string ipAddress) => { g_hAuthorize[slot]?.Kill(); });
@@ -143,7 +146,6 @@ public HookResult OnPlayerConnectFull(EventPlayerConnectFull @event, GameEventIn
143146
return HookResult.Continue;
144147

145148
OnPlayerConnectFull(player);
146-
147149
return HookResult.Continue;
148150
}
149151

@@ -175,14 +177,16 @@ private void OnPlayerConnectFull(CCSPlayerController player)
175177
ulong authorizedSteamID = player.AuthorizedSteamID.SteamId64;
176178
nint handle = player.Handle;
177179

178-
var databaseService = new DatabaseService(Config.DatabaseSettings);
179-
180180
Task.Run(async () =>
181181
{
182-
if (await databaseService.IsSteamIdAllowedAsync(authorizedSteamID))
182+
if (!IsDatabaseConfigDefault())
183183
{
184-
Server.NextWorldUpdate(() => Logger.LogInformation($"{player.PlayerName} ({authorizedSteamID}) was allowed to join without validations because they were found in the database."));
185-
return;
184+
var databaseService = new DatabaseService(Config.DatabaseSettings);
185+
if (await databaseService.IsSteamIdAllowedAsync(authorizedSteamID))
186+
{
187+
Server.NextWorldUpdate(() => Logger.LogInformation($"{player.PlayerName} ({authorizedSteamID}) was allowed to join without validations because they were found in the database."));
188+
return;
189+
}
186190
}
187191

188192
await CheckUserViolations(handle, authorizedSteamID);
@@ -192,7 +196,7 @@ private void OnPlayerConnectFull(CCSPlayerController player)
192196
private async Task CheckUserViolations(nint handle, ulong authorizedSteamID)
193197
{
194198
SteamService steamService = new SteamService(this);
195-
await steamService.FetchSteamUserInfoAsync(handle, authorizedSteamID);
199+
await steamService.FetchSteamUserInfo(handle, authorizedSteamID);
196200

197201
SteamUserInfo? userInfo = steamService.UserInfo;
198202

@@ -220,7 +224,7 @@ private async Task CheckUserViolations(nint handle, ulong authorizedSteamID)
220224
{
221225
Server.ExecuteCommand($"kickid {player.UserId} \"You have been kicked for not meeting the minimum requirements.\"");
222226
}
223-
else
227+
else if (!IsDatabaseConfigDefault())
224228
{
225229
ulong steamID = player.AuthorizedSteamID?.SteamId64 ?? 0;
226230

@@ -261,4 +265,17 @@ private bool IsRestrictionViolated(CCSPlayerController player, SteamUserInfo use
261265

262266
return configChecks.Any(check => check.Item1 && check.Item2 != -1 && check.Item3 < check.Item2);
263267
}
268+
269+
public bool IsDatabaseConfigDefault()
270+
{
271+
DatabaseSettings settings = Config.DatabaseSettings;
272+
return settings.Host == "localhost" &&
273+
settings.Username == "root" &&
274+
settings.Database == "database" &&
275+
settings.Password == "password" &&
276+
settings.Port == 3306 &&
277+
settings.Sslmode == "none" &&
278+
settings.TablePrefix == "" &&
279+
settings.TablePurgeDays == 30;
280+
}
264281
}

src/Models/SteamService.cs

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11

2+
using CounterStrikeSharp.API;
23
using CounterStrikeSharp.API.Core;
34
using KitsuneSteamRestrict;
45
using Microsoft.Extensions.Logging;
@@ -35,25 +36,30 @@ public SteamService(SteamRestrictPlugin plugin)
3536
_steamWebAPIKey = _config.SteamWebAPI;
3637
}
3738

38-
public async Task FetchSteamUserInfoAsync(nint handle, ulong authorizedSteamID)
39+
public async Task FetchSteamUserInfo(nint handle, ulong authorizedSteamID)
3940
{
40-
CSteamID cSteamID = new CSteamID(authorizedSteamID);
41-
42-
UserInfo = new SteamUserInfo
41+
await Server.NextWorldUpdateAsync(() =>
4342
{
44-
HasPrime = SteamGameServer.UserHasLicenseForApp(cSteamID, (AppId_t)624820) == EUserHasLicenseForAppResult.k_EUserHasLicenseResultHasLicense
45-
|| SteamGameServer.UserHasLicenseForApp(cSteamID, (AppId_t)54029) == EUserHasLicenseForAppResult.k_EUserHasLicenseResultHasLicense,
46-
CS2Level = new CCSPlayerController_InventoryServices(handle).PersonaDataPublicLevel
47-
};
48-
49-
string steamId = authorizedSteamID.ToString();
50-
51-
UserInfo.CS2Playtime = await FetchCS2PlaytimeAsync(steamId) / 60;
52-
UserInfo.SteamLevel = await FetchSteamLevelAsync(steamId);
53-
await FetchProfilePrivacyAsync(steamId, UserInfo);
54-
await FetchTradeBanStatusAsync(steamId, UserInfo);
55-
await FetchGameBanStatusAsync(steamId, UserInfo);
56-
await FetchSteamGroupMembershipAsync(steamId, UserInfo);
43+
string steamId = authorizedSteamID.ToString();
44+
CSteamID cSteamID = new CSteamID(authorizedSteamID);
45+
46+
UserInfo = new SteamUserInfo
47+
{
48+
HasPrime = SteamGameServer.UserHasLicenseForApp(cSteamID, (AppId_t)624820) == EUserHasLicenseForAppResult.k_EUserHasLicenseResultHasLicense
49+
|| SteamGameServer.UserHasLicenseForApp(cSteamID, (AppId_t)54029) == EUserHasLicenseForAppResult.k_EUserHasLicenseResultHasLicense,
50+
CS2Level = new CCSPlayerController_InventoryServices(handle).PersonaDataPublicLevel
51+
};
52+
53+
Task.Run(async () =>
54+
{
55+
UserInfo.CS2Playtime = await FetchCS2PlaytimeAsync(steamId) / 60;
56+
UserInfo.SteamLevel = await FetchSteamLevelAsync(steamId);
57+
await FetchProfilePrivacyAsync(steamId, UserInfo);
58+
await FetchTradeBanStatusAsync(steamId, UserInfo);
59+
await FetchGameBanStatusAsync(steamId, UserInfo);
60+
await FetchSteamGroupMembershipAsync(steamId, UserInfo);
61+
});
62+
});
5763
}
5864

5965
private async Task<int> FetchCS2PlaytimeAsync(string steamId)

0 commit comments

Comments
 (0)