11
22using System . Data ;
3+ using System . Text ;
34using CounterStrikeSharp . API ;
45using CounterStrikeSharp . API . Core ;
56using 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}
0 commit comments