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

Commit 3550842

Browse files
committed
fix: AutoPurge query
1 parent 1f6558c commit 3550842

File tree

7 files changed

+126
-64
lines changed

7 files changed

+126
-64
lines changed

CHANGELOG

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,14 @@
1+
-- 2023.04.12 - V4.1.2
2+
3+
- fix: AutoPurge query
4+
5+
-- 2023.04.11 - V4.1.1
6+
7+
- fix: Upgrade MySQL to primary key instead of UNIQUE
8+
- fix: Player couldnt load
9+
- fix: Rank command not prints
10+
- fix: Player data process
11+
112
-- 2023.04.11 - V4.1.0
213

314
- feat: Add Reset option for all module

K4-System/src/Module/Rank/RankCommands.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,8 @@ public void OnCommandRank(CCSPlayerController? player, CommandInfo info)
125125

126126
Server.NextFrame(() =>
127127
{
128-
info.ReplyToCommand($" {plugin.Localizer["k4.general.prefix"]} {plugin.Localizer["k4.ranks.rank.title", k4player.PlayerName]}");
129-
info.ReplyToCommand(plugin.Localizer["k4.ranks.rank.line1", playerData.Points, playerData.Rank.Color, playerData.Rank.Name, rankDictionary.Count - higherRanksCount, rankDictionary.Count]);
128+
player!.PrintToChat($" {plugin.Localizer["k4.general.prefix"]} {plugin.Localizer["k4.ranks.rank.title", k4player.PlayerName]}");
129+
player.PrintToChat(plugin.Localizer["k4.ranks.rank.line1", playerData.Points, playerData.Rank.Color, playerData.Rank.Name, rankDictionary.Count - higherRanksCount, rankDictionary.Count]);
130130

131131
KeyValuePair<string, Rank> nextRankEntry = rankDictionary
132132
.Where(kv => kv.Value.Point > playerData.Rank.Point)
@@ -137,11 +137,11 @@ public void OnCommandRank(CCSPlayerController? player, CommandInfo info)
137137
{
138138
Rank nextRank = nextRankEntry.Value;
139139

140-
info.ReplyToCommand(plugin.Localizer["k4.ranks.rank.line2", nextRank.Color, nextRank.Name]);
141-
info.ReplyToCommand(plugin.Localizer["k4.ranks.rank.line3", nextRank.Point - playerData.Points]);
140+
player.PrintToChat(plugin.Localizer["k4.ranks.rank.line2", nextRank.Color, nextRank.Name]);
141+
player.PrintToChat(plugin.Localizer["k4.ranks.rank.line3", nextRank.Point - playerData.Points]);
142142
}
143143

144-
info.ReplyToCommand(plugin.Localizer["k4.ranks.rank.line4", playerPlace, totalPlayers]);
144+
player.PrintToChat(plugin.Localizer["k4.ranks.rank.line4", playerPlace, totalPlayers]);
145145
});
146146
});
147147
}

K4-System/src/Module/Rank/RankFunctions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,8 +203,8 @@ public void ModifyPlayerPoints(K4Player k4player, int amount, string reason, str
203203

204204
if (result != null)
205205
{
206-
int playerPlace = result.playerPlace + 1;
207-
int totalPlayers = result.totalPlayers;
206+
int playerPlace = (int)result.playerPlace + 1;
207+
int totalPlayers = (int)result.totalPlayers;
208208
return (playerPlace, totalPlayers);
209209
}
210210
}

K4-System/src/Module/Utils/UtilsCommands.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,10 @@ public void OnCommandAdmins(CCSPlayerController? player, CommandInfo info)
3737
continue;
3838

3939
if (PlayerHasPermission(k4player, entry.Permission))
40+
{
4041
adminList.Add($"{plugin.ApplyPrefixColors(entry.ListColor ?? "default")}{k4player.PlayerName}");
42+
break;
43+
}
4144
}
4245
}
4346

K4-System/src/Plugin/Plugin.cs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -108,20 +108,19 @@ public override void Unload(bool hotReload)
108108
public async Task<bool> CreateMultipleTablesAsync()
109109
{
110110
string timesModuleTable = @$"CREATE TABLE IF NOT EXISTS `{this.Config.DatabaseSettings.TablePrefix}k4times` (
111-
`steam_id` VARCHAR(32) COLLATE 'utf8mb4_unicode_ci' UNIQUE NOT NULL,
111+
`steam_id` VARCHAR(32) COLLATE 'utf8mb4_unicode_ci' PRIMARY KEY NOT NULL,
112112
`name` VARCHAR(255) COLLATE 'utf8mb4_unicode_ci' NOT NULL,
113113
`lastseen` DATETIME NOT NULL,
114114
`all` INT NOT NULL DEFAULT 0,
115115
`ct` INT NOT NULL DEFAULT 0,
116116
`t` INT NOT NULL DEFAULT 0,
117117
`spec` INT NOT NULL DEFAULT 0,
118118
`dead` INT NOT NULL DEFAULT 0,
119-
`alive` INT NOT NULL DEFAULT 0,
120-
UNIQUE (`steam_id`)
119+
`alive` INT NOT NULL DEFAULT 0
121120
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;";
122121

123122
string statsModuleTable = $@"CREATE TABLE IF NOT EXISTS `{this.Config.DatabaseSettings.TablePrefix}k4stats` (
124-
`steam_id` VARCHAR(32) COLLATE 'utf8mb4_unicode_ci' UNIQUE NOT NULL,
123+
`steam_id` VARCHAR(32) COLLATE 'utf8mb4_unicode_ci' PRIMARY KEY NOT NULL,
125124
`name` VARCHAR(255) COLLATE 'utf8mb4_unicode_ci' NOT NULL,
126125
`lastseen` DATETIME NOT NULL,
127126
`kills` INT NOT NULL DEFAULT 0,
@@ -161,17 +160,15 @@ public async Task<bool> CreateMultipleTablesAsync()
161160
`flashed_kill` INT NOT NULL DEFAULT 0,
162161
`dominated_kill` INT NOT NULL DEFAULT 0,
163162
`revenge_kill` INT NOT NULL DEFAULT 0,
164-
`assist_flash` INT NOT NULL DEFAULT 0,
165-
UNIQUE (`steam_id`)
163+
`assist_flash` INT NOT NULL DEFAULT 0
166164
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;";
167165

168166
string ranksModuleTable = $@"CREATE TABLE IF NOT EXISTS `{this.Config.DatabaseSettings.TablePrefix}k4ranks` (
169-
`steam_id` VARCHAR(32) COLLATE 'utf8mb4_unicode_ci' UNIQUE NOT NULL,
167+
`steam_id` VARCHAR(32) COLLATE 'utf8mb4_unicode_ci' PRIMARY KEY NOT NULL,
170168
`name` VARCHAR(255) COLLATE 'utf8mb4_unicode_ci' NOT NULL,
171169
`lastseen` DATETIME NOT NULL,
172170
`rank` VARCHAR(255) COLLATE 'utf8mb4_unicode_ci' NOT NULL,
173-
`points` INT NOT NULL DEFAULT 0,
174-
UNIQUE (`steam_id`)
171+
`points` INT NOT NULL DEFAULT 0
175172
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;";
176173

177174
string lvlranksModuleTable = @$"CREATE TABLE IF NOT EXISTS `{Config.DatabaseSettings.LvLRanksTableName}` (

K4-System/src/Plugin/PluginDatabase.cs

Lines changed: 98 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11

22
using System.Data;
3+
using System.Text;
34
using CounterStrikeSharp.API;
45
using CounterStrikeSharp.API.Core;
56
using Dapper;
@@ -44,9 +45,9 @@ public async Task PurgeTableRowsAsync()
4445
parameters.Add("@days", Config.GeneralSettings.TablePurgeDays);
4546

4647
string query = $@"
47-
DELETE FROM `{Config.DatabaseSettings.TablePrefix}k4times` WHERE `lastseen` < NOW() - INTERVAL @days DAY AND `lastseen` != '0000-00-00';
48-
DELETE FROM `{Config.DatabaseSettings.TablePrefix}k4stats` WHERE `lastseen` < NOW() - INTERVAL @days DAY AND `lastseen` != '0000-00-00';
49-
DELETE FROM `{Config.DatabaseSettings.TablePrefix}k4ranks` WHERE `lastseen` < NOW() - INTERVAL @days DAY AND `lastseen` != '0000-00-00';
48+
DELETE FROM `{Config.DatabaseSettings.TablePrefix}k4times` WHERE `lastseen` < NOW() - INTERVAL @days DAY AND `lastseen` > STR_TO_DATE('1970-01-01', '%Y-%m-%d');
49+
DELETE FROM `{Config.DatabaseSettings.TablePrefix}k4stats` WHERE `lastseen` < NOW() - INTERVAL @days DAY AND `lastseen` > STR_TO_DATE('1970-01-01', '%Y-%m-%d');
50+
DELETE FROM `{Config.DatabaseSettings.TablePrefix}k4ranks` WHERE `lastseen` < NOW() - INTERVAL @days DAY AND `lastseen` > STR_TO_DATE('1970-01-01', '%Y-%m-%d');
5051
";
5152

5253
if (Config.GeneralSettings.LevelRanksCompatibility)
@@ -260,11 +261,11 @@ ON DUPLICATE KEY UPDATE
260261
`name` = @escapedName,
261262
`lastseen` = CURRENT_TIMESTAMP;
262263
263-
INSERT INTO `{Config.DatabaseSettings.TablePrefix}k4stats` (`name`, `steam_id`, `lastseen`, `kills`, `firstblood`, `deaths`, `assists`, `shoots`, `hits_taken`, `hits_given`, `headshots`, `grenades`, `mvp`, `round_win`, `round_lose`, `game_win`, `game_lose`, `rounds_overall`, `rounds_ct`, `rounds_t`, `bomb_planted`, `bomb_defused`, `hostage_rescued`, `hostage_killed`)
264+
INSERT INTO `{Config.DatabaseSettings.TablePrefix}k4stats` (`name`, `steam_id`, `lastseen`)
264265
VALUES (
265266
@escapedName,
266267
@steamid,
267-
CURRENT_TIMESTAMP,
268+
CURRENT_TIMESTAMP
268269
)
269270
ON DUPLICATE KEY UPDATE
270271
`name` = @escapedName,
@@ -281,7 +282,7 @@ ON DUPLICATE KEY UPDATE
281282
`lastseen` = CURRENT_TIMESTAMP;
282283
283284
SELECT
284-
r.`points`,
285+
r.`points`,
285286
s.`kills`,
286287
s.`firstblood`,
287288
s.`deaths`,
@@ -290,6 +291,16 @@ ON DUPLICATE KEY UPDATE
290291
s.`hits_taken`,
291292
s.`hits_given`,
292293
s.`headshots`,
294+
s.`chest_hits`,
295+
s.`stomach_hits`,
296+
s.`left_arm_hits`,
297+
s.`right_arm_hits`,
298+
s.`left_leg_hits`,
299+
s.`right_leg_hits`,
300+
s.`neck_hits`,
301+
s.`unused_hits`,
302+
s.`gear_hits`,
303+
s.`special_hits`,
293304
s.`grenades`,
294305
s.`mvp`,
295306
s.`round_win`,
@@ -303,6 +314,13 @@ ON DUPLICATE KEY UPDATE
303314
s.`bomb_defused`,
304315
s.`hostage_rescued`,
305316
s.`hostage_killed`,
317+
s.`noscope_kill`,
318+
s.`penetrated_kill`,
319+
s.`thrusmoke_kill`,
320+
s.`flashed_kill`,
321+
s.`dominated_kill`,
322+
s.`revenge_kill`,
323+
s.`assist_flash`,
306324
t.`all`,
307325
t.`ct`,
308326
t.`t`,
@@ -320,30 +338,30 @@ LEFT JOIN
320338
";
321339

322340

323-
MySqlParameter[] parameters =
324-
[
325-
new MySqlParameter("@escapedName", k4player.PlayerName),
326-
new MySqlParameter("@steamid", k4player.SteamID),
327-
new MySqlParameter("@noneRankName", ModuleRank.GetNoneRank()?.Name ?? "none"),
328-
new MySqlParameter("@startPoints", Config.RankSettings.StartPoints)
329-
];
330-
331341
try
332342
{
333343
using (var connection = CreateConnection(Config))
334344
{
335345
await connection.OpenAsync();
346+
347+
var parameters = new DynamicParameters();
348+
parameters.Add("@escapedName", k4player.PlayerName);
349+
parameters.Add("@steamid", k4player.SteamID);
350+
parameters.Add("@noneRankName", ModuleRank.GetNoneRank()?.Name ?? "none");
351+
parameters.Add("@startPoints", Config.RankSettings.StartPoints);
352+
353+
// Execute the query with the parameters
336354
var rows = await connection.QueryAsync(combinedQuery, parameters);
337355

338356
foreach (var row in rows)
339357
{
340-
LoadPlayerRowToCache(k4player, row);
358+
LoadPlayerRowToCache(k4player, row, false);
341359
}
342360
}
343361
}
344362
catch (Exception ex)
345363
{
346-
Logger.LogError($"A problem occurred while loading single player cache: {ex.Message}");
364+
Logger.LogError("A problem occurred while loading single player cache: {ErrorMessage}", ex.Message);
347365
}
348366
}
349367

@@ -354,29 +372,58 @@ private void LoadAllPlayersCache()
354372
if (players.Count == 0)
355373
return;
356374

375+
foreach (var player in players)
376+
{
377+
K4Player k4player = new K4Player(this, player);
378+
K4Players.Add(k4player);
379+
}
380+
357381
string combinedQuery = $@"SELECT
358-
r.`steam_id`,
359-
r.`points`,
360-
s.`kills`,
361-
s.`shoots`,
362-
s.`firstblood`,
363-
s.`deaths`,
364-
s.`hits_given`,
365-
s.`hits_taken`,
366-
s.`headshots`,
367-
s.`grenades`,
368-
s.`mvp`,
369-
s.`round_win`,
370-
s.`round_lose`,
371-
s.`game_win`,
372-
s.`game_lose`,
373-
s.`assists`,
374-
t.`all`,
375-
t.`ct`,
376-
t.`t`,
377-
t.`spec`,
378-
t.`alive`,
379-
t.`dead`
382+
r.`points`,
383+
s.`kills`,
384+
s.`firstblood`,
385+
s.`deaths`,
386+
s.`assists`,
387+
s.`shoots`,
388+
s.`hits_taken`,
389+
s.`hits_given`,
390+
s.`headshots`,
391+
s.`chest_hits`,
392+
s.`stomach_hits`,
393+
s.`left_arm_hits`,
394+
s.`right_arm_hits`,
395+
s.`left_leg_hits`,
396+
s.`right_leg_hits`,
397+
s.`neck_hits`,
398+
s.`unused_hits`,
399+
s.`gear_hits`,
400+
s.`special_hits`,
401+
s.`grenades`,
402+
s.`mvp`,
403+
s.`round_win`,
404+
s.`round_lose`,
405+
s.`game_win`,
406+
s.`game_lose`,
407+
s.`rounds_overall`,
408+
s.`rounds_ct`,
409+
s.`rounds_t`,
410+
s.`bomb_planted`,
411+
s.`bomb_defused`,
412+
s.`hostage_rescued`,
413+
s.`hostage_killed`,
414+
s.`noscope_kill`,
415+
s.`penetrated_kill`,
416+
s.`thrusmoke_kill`,
417+
s.`flashed_kill`,
418+
s.`dominated_kill`,
419+
s.`revenge_kill`,
420+
s.`assist_flash`,
421+
t.`all`,
422+
t.`ct`,
423+
t.`t`,
424+
t.`spec`,
425+
t.`alive`,
426+
t.`dead`
380427
FROM
381428
`{Config.DatabaseSettings.TablePrefix}k4ranks` AS r
382429
LEFT JOIN
@@ -406,12 +453,15 @@ public async Task LoadAllPlayersCacheAsync(string combinedQuery)
406453

407454
foreach (var k4player in K4Players)
408455
{
456+
if (!k4player.IsValid || !k4player.IsPlayer)
457+
continue;
458+
409459
await connection.OpenAsync();
410460
var rows = await connection.QueryAsync(combinedQuery);
411461

412462
foreach (var row in rows)
413463
{
414-
LoadPlayerRowToCache(k4player, row);
464+
LoadPlayerRowToCache(k4player, row, true);
415465
}
416466
}
417467
}
@@ -422,26 +472,26 @@ public async Task LoadAllPlayersCacheAsync(string combinedQuery)
422472
}
423473
}
424474

425-
public void LoadPlayerRowToCache(K4Player k4player, DataRow row)
475+
public void LoadPlayerRowToCache(K4Player k4player, dynamic row, bool all)
426476
{
427477
/** ? Load Rank to Cache */
428478
RankData? rankData = null;
429479

430480
if (Config.GeneralSettings.ModuleRanks)
431481
{
432-
int points = Convert.ToInt32(row["points"]);
433-
434482
rankData = new RankData
435483
{
436-
Points = points,
437-
Rank = ModuleRank.GetPlayerRank(points),
484+
Points = row.points,
485+
Rank = ModuleRank.GetPlayerRank(row.points),
438486
PlayedRound = false,
439487
RoundPoints = 0,
440488
HideAdminTag = false,
441489
MuteMessages = false
442490
};
443491
}
444492

493+
var rowDictionary = (IDictionary<string, object>)row;
494+
445495
/** ? Load Stat to Cache */
446496
StatData? statData = null;
447497

@@ -453,7 +503,7 @@ public void LoadPlayerRowToCache(K4Player k4player, DataRow row)
453503

454504
foreach (string statField in statFieldNames)
455505
{
456-
NewStatFields[statField] = Convert.ToInt32(row[statField]);
506+
NewStatFields[statField] = (int)rowDictionary[statField];
457507
}
458508

459509
statData = new StatData
@@ -473,7 +523,7 @@ public void LoadPlayerRowToCache(K4Player k4player, DataRow row)
473523

474524
foreach (string timeField in timeFieldNames)
475525
{
476-
TimeFields[timeField] = Convert.ToInt32(row[timeField]);
526+
TimeFields[timeField] = (int)rowDictionary[timeField];
477527
}
478528

479529
DateTime now = DateTime.UtcNow;
@@ -494,6 +544,7 @@ public void LoadPlayerRowToCache(K4Player k4player, DataRow row)
494544
k4player.statData = statData;
495545
k4player.timeData = timeData;
496546

497-
K4Players.Add(k4player);
547+
if (!all)
548+
K4Players.Add(k4player);
498549
}
499550
}

K4-System/src/Plugin/PluginManifest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public sealed partial class Plugin : BasePlugin
1010

1111
public override string ModuleAuthor => "K4ryuu";
1212

13-
public override string ModuleVersion => "4.1.0 " +
13+
public override string ModuleVersion => "4.1.2 " +
1414
#if RELEASE
1515
"(release)";
1616
#else

0 commit comments

Comments
 (0)