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

Commit e872fa8

Browse files
committed
Patch v4.3.2
1 parent e32bd14 commit e872fa8

File tree

5 files changed

+175
-155
lines changed

5 files changed

+175
-155
lines changed

CHANGELOG

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
-- 2023.05.17 - V4.3.2
2+
3+
- fix: Connect message shown even if its disabled
4+
- fix: Placeholder replaced error logs
5+
- fix: Player top placement is not fetched on join
6+
- fix: Load all player cache is running the query two times
7+
18
-- 2023.05.17 - V4.3.1
29

310
- fix: Connect/Disconnect message parentheses

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@ public void Initialize_Events()
1818
if (k4player is null || !k4player.IsValid || !k4player.IsPlayer)
1919
return HookResult.Continue;
2020

21-
Server.PrintToChatAll(plugin.ReplacePlaceholders(k4player, plugin.Localizer["k4.announcement.disconnect"]));
21+
string? message = plugin.ReplacePlaceholders(k4player, plugin.Localizer["k4.announcement.disconnect"]);
22+
if (message != null)
23+
Server.PrintToChatAll(message);
24+
2225
return HookResult.Continue;
2326
});
2427
}

K4-System/src/Plugin/PluginDatabase.cs

Lines changed: 158 additions & 151 deletions
Original file line numberDiff line numberDiff line change
@@ -262,94 +262,95 @@ private async Task ExecuteTimeUpdateAsync(MySqlTransaction transaction, K4Player
262262
public async Task LoadPlayerCacheAsync(K4Player k4player)
263263
{
264264
string combinedQuery = $@"
265-
INSERT INTO `{Config.DatabaseSettings.TablePrefix}k4ranks` (`name`, `steam_id`, `rank`, `points`, `lastseen`)
266-
VALUES (
267-
@escapedName,
268-
@steamid,
269-
@noneRankName,
270-
@startPoints,
271-
CURRENT_TIMESTAMP
272-
)
273-
ON DUPLICATE KEY UPDATE
274-
`name` = @escapedName,
275-
`lastseen` = CURRENT_TIMESTAMP;
276-
277-
INSERT INTO `{Config.DatabaseSettings.TablePrefix}k4stats` (`name`, `steam_id`, `lastseen`)
278-
VALUES (
279-
@escapedName,
280-
@steamid,
281-
CURRENT_TIMESTAMP
282-
)
283-
ON DUPLICATE KEY UPDATE
284-
`name` = @escapedName,
285-
`lastseen` = CURRENT_TIMESTAMP;
286-
287-
INSERT INTO `{Config.DatabaseSettings.TablePrefix}k4times` (`name`, `steam_id`, `lastseen`)
288-
VALUES (
289-
@escapedName,
290-
@steamid,
291-
CURRENT_TIMESTAMP
292-
)
293-
ON DUPLICATE KEY UPDATE
294-
`name` = @escapedName,
295-
`lastseen` = CURRENT_TIMESTAMP;
296-
297-
SELECT
298-
r.`points`,
299-
s.`kills`,
300-
s.`firstblood`,
301-
s.`deaths`,
302-
s.`assists`,
303-
s.`shoots`,
304-
s.`hits_taken`,
305-
s.`hits_given`,
306-
s.`headshots`,
307-
s.`chest_hits`,
308-
s.`stomach_hits`,
309-
s.`left_arm_hits`,
310-
s.`right_arm_hits`,
311-
s.`left_leg_hits`,
312-
s.`right_leg_hits`,
313-
s.`neck_hits`,
314-
s.`unused_hits`,
315-
s.`gear_hits`,
316-
s.`special_hits`,
317-
s.`grenades`,
318-
s.`mvp`,
319-
s.`round_win`,
320-
s.`round_lose`,
321-
s.`game_win`,
322-
s.`game_lose`,
323-
s.`rounds_overall`,
324-
s.`rounds_ct`,
325-
s.`rounds_t`,
326-
s.`bomb_planted`,
327-
s.`bomb_defused`,
328-
s.`hostage_rescued`,
329-
s.`hostage_killed`,
330-
s.`noscope_kill`,
331-
s.`penetrated_kill`,
332-
s.`thrusmoke_kill`,
333-
s.`flashed_kill`,
334-
s.`dominated_kill`,
335-
s.`revenge_kill`,
336-
s.`assist_flash`,
337-
t.`all`,
338-
t.`ct`,
339-
t.`t`,
340-
t.`spec`,
341-
t.`alive`,
342-
t.`dead`
343-
FROM
344-
`{Config.DatabaseSettings.TablePrefix}k4ranks` AS r
345-
LEFT JOIN
346-
`{Config.DatabaseSettings.TablePrefix}k4stats` AS s ON r.`steam_id` = s.`steam_id`
347-
LEFT JOIN
348-
`{Config.DatabaseSettings.TablePrefix}k4times` AS t ON r.`steam_id` = t.`steam_id`
349-
WHERE
350-
r.`steam_id` = @steamid;
351-
";
352-
265+
INSERT INTO `{Config.DatabaseSettings.TablePrefix}k4ranks` (`name`, `steam_id`, `rank`, `points`, `lastseen`)
266+
VALUES (
267+
@escapedName,
268+
@steamid,
269+
@noneRankName,
270+
@startPoints,
271+
CURRENT_TIMESTAMP
272+
)
273+
ON DUPLICATE KEY UPDATE
274+
`name` = @escapedName,
275+
`lastseen` = CURRENT_TIMESTAMP;
276+
277+
INSERT INTO `{Config.DatabaseSettings.TablePrefix}k4stats` (`name`, `steam_id`, `lastseen`)
278+
VALUES (
279+
@escapedName,
280+
@steamid,
281+
CURRENT_TIMESTAMP
282+
)
283+
ON DUPLICATE KEY UPDATE
284+
`name` = @escapedName,
285+
`lastseen` = CURRENT_TIMESTAMP;
286+
287+
INSERT INTO `{Config.DatabaseSettings.TablePrefix}k4times` (`name`, `steam_id`, `lastseen`)
288+
VALUES (
289+
@escapedName,
290+
@steamid,
291+
CURRENT_TIMESTAMP
292+
)
293+
ON DUPLICATE KEY UPDATE
294+
`name` = @escapedName,
295+
`lastseen` = CURRENT_TIMESTAMP;
296+
297+
SELECT
298+
r.`points`,
299+
s.`kills`,
300+
s.`firstblood`,
301+
s.`deaths`,
302+
s.`assists`,
303+
s.`shoots`,
304+
s.`hits_taken`,
305+
s.`hits_given`,
306+
s.`headshots`,
307+
s.`chest_hits`,
308+
s.`stomach_hits`,
309+
s.`left_arm_hits`,
310+
s.`right_arm_hits`,
311+
s.`left_leg_hits`,
312+
s.`right_leg_hits`,
313+
s.`neck_hits`,
314+
s.`unused_hits`,
315+
s.`gear_hits`,
316+
s.`special_hits`,
317+
s.`grenades`,
318+
s.`mvp`,
319+
s.`round_win`,
320+
s.`round_lose`,
321+
s.`game_win`,
322+
s.`game_lose`,
323+
s.`rounds_overall`,
324+
s.`rounds_ct`,
325+
s.`rounds_t`,
326+
s.`bomb_planted`,
327+
s.`bomb_defused`,
328+
s.`hostage_rescued`,
329+
s.`hostage_killed`,
330+
s.`noscope_kill`,
331+
s.`penetrated_kill`,
332+
s.`thrusmoke_kill`,
333+
s.`flashed_kill`,
334+
s.`dominated_kill`,
335+
s.`revenge_kill`,
336+
s.`assist_flash`,
337+
t.`all`,
338+
t.`ct`,
339+
t.`t`,
340+
t.`spec`,
341+
t.`alive`,
342+
t.`dead`,
343+
(SELECT COUNT(*) FROM `{Config.DatabaseSettings.TablePrefix}k4ranks`
344+
WHERE `points` > (SELECT `points` FROM `{Config.DatabaseSettings.TablePrefix}k4ranks` WHERE `steam_id` = @steamid)) AS playerPlace
345+
FROM
346+
`{Config.DatabaseSettings.TablePrefix}k4ranks` AS r
347+
LEFT JOIN
348+
`{Config.DatabaseSettings.TablePrefix}k4stats` AS s ON r.`steam_id` = s.`steam_id`
349+
LEFT JOIN
350+
`{Config.DatabaseSettings.TablePrefix}k4times` AS t ON r.`steam_id` = t.`steam_id`
351+
WHERE
352+
r.`steam_id` = @steamid;
353+
";
353354

354355
try
355356
{
@@ -378,7 +379,6 @@ LEFT JOIN
378379
}
379380
}
380381

381-
382382
private void LoadAllPlayersCache()
383383
{
384384
List<CCSPlayerController> players = Utilities.GetPlayers().Where(player => player?.IsValid == true && player.PlayerPawn?.IsValid == true).ToList();
@@ -393,59 +393,61 @@ private void LoadAllPlayersCache()
393393
}
394394

395395
string combinedQuery = $@"SELECT
396-
r.`points`,
397-
s.`kills`,
398-
s.`firstblood`,
399-
s.`deaths`,
400-
s.`assists`,
401-
s.`shoots`,
402-
s.`hits_taken`,
403-
s.`hits_given`,
404-
s.`headshots`,
405-
s.`chest_hits`,
406-
s.`stomach_hits`,
407-
s.`left_arm_hits`,
408-
s.`right_arm_hits`,
409-
s.`left_leg_hits`,
410-
s.`right_leg_hits`,
411-
s.`neck_hits`,
412-
s.`unused_hits`,
413-
s.`gear_hits`,
414-
s.`special_hits`,
415-
s.`grenades`,
416-
s.`mvp`,
417-
s.`round_win`,
418-
s.`round_lose`,
419-
s.`game_win`,
420-
s.`game_lose`,
421-
s.`rounds_overall`,
422-
s.`rounds_ct`,
423-
s.`rounds_t`,
424-
s.`bomb_planted`,
425-
s.`bomb_defused`,
426-
s.`hostage_rescued`,
427-
s.`hostage_killed`,
428-
s.`noscope_kill`,
429-
s.`penetrated_kill`,
430-
s.`thrusmoke_kill`,
431-
s.`flashed_kill`,
432-
s.`dominated_kill`,
433-
s.`revenge_kill`,
434-
s.`assist_flash`,
435-
t.`all`,
436-
t.`ct`,
437-
t.`t`,
438-
t.`spec`,
439-
t.`alive`,
440-
t.`dead`
441-
FROM
442-
`{Config.DatabaseSettings.TablePrefix}k4ranks` AS r
443-
LEFT JOIN
444-
`{Config.DatabaseSettings.TablePrefix}k4stats` AS s ON r.`steam_id` = s.`steam_id`
445-
LEFT JOIN
446-
`{Config.DatabaseSettings.TablePrefix}k4times` AS t ON r.`steam_id` = t.`steam_id`
447-
WHERE
448-
r.`steam_id` IN (" + string.Join(",", players.Select(player => $"'{player.SteamID}'")) + ");";
396+
r.`points`,
397+
s.`kills`,
398+
s.`firstblood`,
399+
s.`deaths`,
400+
s.`assists`,
401+
s.`shoots`,
402+
s.`hits_taken`,
403+
s.`hits_given`,
404+
s.`headshots`,
405+
s.`chest_hits`,
406+
s.`stomach_hits`,
407+
s.`left_arm_hits`,
408+
s.`right_arm_hits`,
409+
s.`left_leg_hits`,
410+
s.`right_leg_hits`,
411+
s.`neck_hits`,
412+
s.`unused_hits`,
413+
s.`gear_hits`,
414+
s.`special_hits`,
415+
s.`grenades`,
416+
s.`mvp`,
417+
s.`round_win`,
418+
s.`round_lose`,
419+
s.`game_win`,
420+
s.`game_lose`,
421+
s.`rounds_overall`,
422+
s.`rounds_ct`,
423+
s.`rounds_t`,
424+
s.`bomb_planted`,
425+
s.`bomb_defused`,
426+
s.`hostage_rescued`,
427+
s.`hostage_killed`,
428+
s.`noscope_kill`,
429+
s.`penetrated_kill`,
430+
s.`thrusmoke_kill`,
431+
s.`flashed_kill`,
432+
s.`dominated_kill`,
433+
s.`revenge_kill`,
434+
s.`assist_flash`,
435+
t.`all`,
436+
t.`ct`,
437+
t.`t`,
438+
t.`spec`,
439+
t.`alive`,
440+
t.`dead`,
441+
(SELECT COUNT(*) FROM `{Config.DatabaseSettings.TablePrefix}k4ranks`
442+
WHERE `points` > (SELECT `points` FROM `{Config.DatabaseSettings.TablePrefix}k4ranks` WHERE `steam_id` = r.`steam_id`)) AS playerPlace
443+
FROM
444+
`{Config.DatabaseSettings.TablePrefix}k4ranks` AS r
445+
LEFT JOIN
446+
`{Config.DatabaseSettings.TablePrefix}k4stats` AS s ON r.`steam_id` = s.`steam_id`
447+
LEFT JOIN
448+
`{Config.DatabaseSettings.TablePrefix}k4times` AS t ON r.`steam_id` = t.`steam_id`
449+
WHERE
450+
r.`steam_id` IN (" + string.Join(",", players.Select(player => $"'{player.SteamID}'")) + ");";
449451

450452
Task.Run(() => LoadAllPlayersCacheAsync(combinedQuery));
451453
}
@@ -457,16 +459,14 @@ public async Task LoadAllPlayersCacheAsync(string combinedQuery)
457459
using (var connection = CreateConnection(Config))
458460
{
459461
await connection.OpenAsync();
460-
var players = await connection.QueryAsync<dynamic>(combinedQuery);
462+
var rows = await connection.QueryAsync<dynamic>(combinedQuery);
461463

462-
foreach (var k4player in K4Players.ToList())
464+
foreach (var row in rows)
463465
{
464-
if (!k4player.IsValid || !k4player.IsPlayer)
465-
continue;
466-
467-
var rows = await connection.QueryAsync(combinedQuery);
466+
string steamId = row.steam_id;
467+
K4Player? k4player = K4Players.FirstOrDefault(p => p.SteamID == ulong.Parse(steamId));
468468

469-
foreach (var row in rows)
469+
if (k4player != null && k4player.IsValid && k4player.IsPlayer)
470470
{
471471
LoadPlayerRowToCache(k4player, row, true);
472472
}
@@ -494,7 +494,7 @@ public void LoadPlayerRowToCache(K4Player k4player, dynamic row, bool all)
494494
RoundPoints = 0,
495495
HideAdminTag = false,
496496
MuteMessages = false,
497-
TopPlacement = 0
497+
TopPlacement = (int)row.playerPlace + 1
498498
};
499499
}
500500

@@ -555,7 +555,14 @@ public void LoadPlayerRowToCache(K4Player k4player, dynamic row, bool all)
555555
if (!all)
556556
{
557557
K4Players.Add(k4player);
558-
Server.NextWorldUpdate(() => Server.PrintToChatAll(ReplacePlaceholders(k4player, Localizer["k4.announcement.connect"])));
558+
559+
if (Config.UtilSettings.ConnectMessageEnable)
560+
{
561+
string? message = ReplacePlaceholders(k4player, Localizer["k4.announcement.connect"]);
562+
563+
if (message != null)
564+
Server.NextWorldUpdate(() => Server.PrintToChatAll(message));
565+
}
559566
}
560567
}
561568
}

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.3.1 " +
13+
public override string ModuleVersion => "4.3.2 " +
1414
#if RELEASE
1515
"(release)";
1616
#else

0 commit comments

Comments
 (0)