Skip to content

Commit

Permalink
v 0.7
Browse files Browse the repository at this point in the history
  • Loading branch information
NickFox007 authored Sep 13, 2024
1 parent 9ea9382 commit a9fb7cd
Show file tree
Hide file tree
Showing 3 changed files with 174 additions and 17 deletions.
46 changes: 42 additions & 4 deletions PlayerSettings/Main.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,31 @@
using CounterStrikeSharp.API.Modules.Commands;
using CounterStrikeSharp.API.Modules.Entities;
using CounterStrikeSharp.API.Modules.Menu;
using System.Text.Json.Serialization;
using static CounterStrikeSharp.API.Core.Listeners;


namespace PlayerSettings;
public class PlayerSettingsCore : BasePlugin

public class PluginConfig : BasePluginConfig
{
[JsonPropertyName("DatabaseParams")] public DatabaseParams DatabaseParams { get; set; } = new DatabaseParams();

}
public class PlayerSettingsCore : BasePlugin, IPluginConfig<PluginConfig>
{
internal static PlayerSettingsCore plugin;
public PluginConfig Config { get; set; }

public void OnConfigParsed(PluginConfig config)
{
plugin = this;
Config = config;
Storage.Init();
}

public override string ModuleName => "PlayerSettings [Core]";
public override string ModuleVersion => "0.6";
public override string ModuleVersion => "0.7";
public override string ModuleAuthor => "Nick Fox";
public override string ModuleDescription => "One storage for player's settings (aka ClientCookies)";

Expand All @@ -22,9 +39,8 @@ public override void Load(bool hotReload)
{
_api = new SettingsApi();
Capabilities.RegisterPluginCapability(_pluginCapability, () => _api);
Storage.Init(this);

RegisterListener<Listeners.OnClientAuthorized>(OnClientAuthorized);
RegisterListener<Listeners.OnClientAuthorized>(OnClientAuthorized);
}

public override void Unload(bool hotReload)
Expand All @@ -36,4 +52,26 @@ private void OnClientAuthorized(int slot, SteamID steamID)
{
((SettingsApi)_api).LoadOnConnect(Utilities.GetPlayerFromSlot(slot));
}

}

public struct DatabaseParams
{
public string Host { get; set; }
public string Name { get; set; }
public string User { get; set; }
public string Password { get; set; }

public DatabaseParams()
{
Host = "127.0.0.1:3306";
Name = "";
User = "";
Password = "";
}

public bool IsDefault()
{
return (Host == "127.0.0.1:3306" && Name == "" && User == "" && Password == "") || Host == "";
}
}
103 changes: 103 additions & 0 deletions PlayerSettings/Migrate.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
using AnyBaseLib;
using CounterStrikeSharp.API.Core;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PlayerSettings
{
internal static class Migrate
{
static IAnyBase sqlite, mysql;

internal static void Init(IAnyBase mysql)
{
Migrate.mysql = mysql;
sqlite = CAnyBase.Base("sqlite");
sqlite.Set(AnyBaseLib.Bases.CommitMode.AutoCommit, Path.Combine(PlayerSettingsCore.plugin.ModuleDirectory, "settings"));
sqlite.Init();

mysql.QueryAsync("SELECT COUNT(*) FROM `settings_users`", [], StartMigrate);
}


private static void StartMigrate(List<List<string>> res)
{
if (res[0][0] == "0")
Task.Run(MigrateUsers);
else
Close();
}

private static void MigrateUsers()
{
var res = sqlite.Query("SELECT `id`,`steam` FROM `settings_users`", []);
if (res.Count == 0)
{
Console.WriteLine("Nothing to migrate [users]");
Close();
}
else
{
PlayerSettingsCore.plugin.Logger.LogInformation("Migrating users...");
var sql = "";
var args = new List<string>();
int count = 0;
foreach (var row in res)
{
sql += "INSERT INTO `settings_users` (`id`,`steam`) VALUES ({ARG}, '{ARG}'); ";
args.Add(row[0]);
args.Add(row[1]);
count++;
if (count % (res.Count / 10) == 0) PlayerSettingsCore.plugin.Logger.LogInformation($"Migrating... [{Math.Round((float)count / ((float)res.Count) * 100, MidpointRounding.ToPositiveInfinity)}%]");
}

mysql.QueryAsync(sql, args, (_) => PlayerSettingsCore.plugin.Logger.LogInformation("Migrated users!"), true);

MigrateSettings();
}
}

private static void MigrateSettings()
{
var res = sqlite.Query("SELECT `user_id`,`param`,`value` FROM `settings_values`", []);
if (res.Count > 0)
{
PlayerSettingsCore.plugin.Logger.LogInformation("Migrating settings...");
var sql = "";
var args = new List<string>();
int count = 0;
foreach (var row in res)
{
sql += "INSERT INTO `settings_values` (`user_id`,`param`, `value`) VALUES ({ARG}, '{ARG}', '{ARG}'); ";
args.Add(row[0]);
args.Add(row[1]);
args.Add(row[2]);
count++;
if(count % (res.Count/10) == 0) PlayerSettingsCore.plugin.Logger.LogInformation($"Migrating... [{Math.Round((float)count / ((float)res.Count) * 100, MidpointRounding.ToPositiveInfinity)}%]");
}

mysql.QueryAsync(sql, args, (_) =>
{
PlayerSettingsCore.plugin.Logger.LogInformation("Migrated settings!");
Close();
}, true);

}
else
{
Console.WriteLine("Nothing to migrate [values]");
Close();
}
}


private static void Close()
{
sqlite.Close();
}
}
}
42 changes: 29 additions & 13 deletions PlayerSettings/Storage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,31 @@ namespace PlayerSettings
internal static class Storage
{
private static IAnyBase db;
public static void Init(BasePlugin plugin, string driver = "sqlite")

public static void Init()
{
db = CAnyBase.Base(driver);
db.Set(AnyBaseLib.Bases.CommitMode.AutoCommit, Path.Combine(plugin.ModuleDirectory,"settings"));
var is_sqlite = PlayerSettingsCore.plugin.Config.DatabaseParams.IsDefault();
if (is_sqlite)
{
db = CAnyBase.Base("sqlite");
db.Set(AnyBaseLib.Bases.CommitMode.AutoCommit, Path.Combine(PlayerSettingsCore.plugin.ModuleDirectory, "settings"));
}
else
{
db = CAnyBase.Base("mysql");
db.Set(AnyBaseLib.Bases.CommitMode.AutoCommit, PlayerSettingsCore.plugin.Config.DatabaseParams.Name, PlayerSettingsCore.plugin.Config.DatabaseParams.Host, PlayerSettingsCore.plugin.Config.DatabaseParams.User, PlayerSettingsCore.plugin.Config.DatabaseParams.Password);
}

db.Init();
db.QueryAsync("CREATE TABLE IF NOT EXISTS `settings_users` (`id` INTEGER PRIMARY KEY AUTO_INCREMENT, `steam` VARCHAR(255) NOT NULL)", null, (_) =>
{
db.QueryAsync("CREATE TABLE IF NOT EXISTS `settings_values` (`user_id` INT, `param` VARCHAR(255) NOT NULL, `value` VARCHAR(255) NOT NULL)", null, (_) =>
{
if (!is_sqlite) Migrate.Init(db);
}, true);
},true);


db.Init();
db.QueryAsync("create table if not exists \"settings_users\" (\"id\" integer primary key AUTOINCREMENT, \"steam\" varchar(255) not null)", null, null, true);
db.QueryAsync("create table if not exists \"settings_values\" (\"user_id\" int, \"param\" varchar(255) not null, \"value\" varchar(255) not null)", null, null, true);
}
/*
public static int GetUserId(CCSPlayerController player)
Expand All @@ -40,39 +56,39 @@ public static int GetUserId(CCSPlayerController player)
public static void GetUserIdAsync(CCSPlayerController player, Action<int> callback)
{
var steamid = player.SteamID;
db.QueryAsync("select \"id\" from \"settings_users\" where \"steam\" = \"{ARG}\"", new List<string>([steamid.ToString()]), (data) => {
db.QueryAsync("SELECT `id` FROM `settings_users` WHERE `steam` = '{ARG}'", new List<string>([steamid.ToString()]), (data) => {
if (data.Count > 0)
{
callback(int.Parse(data[0][0]));
}
else
db.QueryAsync("insert into \"settings_users\" (\"steam\") values (\"{ARG}\")", new List<string>([steamid.ToString()]), (data) => GetUserIdAsync(player, callback), true);
db.QueryAsync("INSERT INTO `settings_users` (`steam`) VALUES ('{ARG}')", new List<string>([steamid.ToString()]), (data) => GetUserIdAsync(player, callback), true);
});


}

internal static void LoadSettings(int userid, Action<List<List<string>>> action)
{
db.QueryAsync("select \"param\",\"value\" from \"settings_values\" where \"user_id\" = {ARG}", new List<string>([userid.ToString()]), action);
db.QueryAsync("SELECT `param`, `value` FROM `settings_values` WHERE `user_id` = {ARG}", new List<string>([userid.ToString()]), action);
}



public static string GetUserSettingValue(int userid, string param, string default_value)
{
var res = db.Query("select \"value\" from \"settings_values\" where \"user_id\" = {ARG} and \"param\" = \"{ARG}\"", new List<string>([userid.ToString(), param]));
var res = db.Query("SELECT `value` FROM `settings_values` WHERE `user_id` = {ARG} AND `param` = '{ARG}'", new List<string>([userid.ToString(), param]));
if (res.Count == 0)
{
db.Query("insert into \"settings_values\" (\"user_id\", \"param\",\"value\") values ({ARG},\"{ARG}\", \"{ARG}\")", new List<string>([userid.ToString(), param, default_value]), true);
db.Query("INSERT INTO `settings_values` (`user_id`, `param`, `value`) VALUES ({ARG},'{ARG}', '{ARG}')", new List<string>([userid.ToString(), param, default_value]), true);
return default_value;
}
return res[0][0];
}

public static void SetUserSettingValue(int userid, string param, string value)
{
db.QueryAsync("update \"settings_values\" set \"value\" = \"{ARG}\" where \"user_id\" = {ARG} and \"param\" = \"{ARG}\"", new List<string>([value, userid.ToString(), param]), null, true);
db.QueryAsync("UPDATE `settings_values` SET `value` = '{ARG}' WHERE `user_id` = {ARG} AND `param` = '{ARG}'", new List<string>([value, userid.ToString(), param]), null, true);
}

public static void Close()
Expand Down

0 comments on commit a9fb7cd

Please sign in to comment.