@@ -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}
0 commit comments