@@ -26,6 +26,7 @@ int g_iClientPreviousMenu[MAXPLAYERS + 1] = {0, ...},
26
26
g_iDefaultLength ;
27
27
28
28
bool g_bKnifeModeEnabled ,
29
+ g_bUserVerified [MAXPLAYERS + 1 ] = { false , ... },
29
30
g_bIsClientRestricted [MAXPLAYERS + 1 ] = { false , ... },
30
31
g_bIsClientTypingReason [MAXPLAYERS + 1 ] = { false , ... },
31
32
g_bLate = false ,
@@ -102,7 +103,7 @@ public Plugin myinfo = {
102
103
name = " KnockbackRestrict" ,
103
104
author = " Dolly, Rushaway" ,
104
105
description = " Adjust knockback of certain weapons for the kbanned players" ,
105
- version = " 3.4.6 " ,
106
+ version = " 3.4.7 " ,
106
107
url = " https://github.com/srcdslab/sm-plugin-KnockbackRestrict"
107
108
};
108
109
@@ -282,11 +283,8 @@ public void OnMapStart() {
282
283
/* MAP NAME */
283
284
GetCurrentMap (g_sMapName , sizeof (g_sMapName ));
284
285
285
- /* GET ALL KBANS */
286
- CreateTimer (1.0 , GetAllKbans_Timer );
287
-
288
286
/* Check all kbans by a timer */
289
- CreateTimer (2 .0 , CheckAllKbans_Timer , _ , TIMER_FLAG_NO_MAPCHANGE | TIMER_REPEAT );
287
+ CreateTimer (5 .0 , CheckAllKbans_Timer , _ , TIMER_FLAG_NO_MAPCHANGE | TIMER_REPEAT );
290
288
}
291
289
292
290
public void OnMapEnd () {
@@ -331,12 +329,19 @@ public void OnClientPutInServer(int client) {
331
329
}
332
330
333
331
public void OnClientPostAdminCheck (int client ) {
334
- if (IsFakeClient ( client ) || IsClientSourceTV ( client ) || g_allKbans == null || g_OfflinePlayers == null || ! IsDBConnected ()) {
332
+ if (g_bUserVerified [ client ] || g_allKbans == null || g_OfflinePlayers == null || ! IsDBConnected ()) {
335
333
return ;
336
334
}
337
335
336
+ // We need to get last only last ban
338
337
char queryEx [MAX_QUERIE_LENGTH ];
339
- g_hDB .Format (queryEx , sizeof (queryEx ), " SELECT * FROM `KbRestrict_CurrentBans` WHERE `client_steamid`='%s ' OR `client_ip`='%s '" , g_sSteamIDs [client ], g_sIPs [client ]);
338
+ g_hDB .Format (queryEx , sizeof (queryEx ),
339
+ " SELECT id, client_name, client_steamid, client_ip, admin_name, admin_steamid, reason, map, length, time_stamp_start, time_stamp_end, is_expired, is_removed \
340
+ FROM `KbRestrict_CurrentBans` \
341
+ WHERE `client_steamid`='%s ' OR `client_ip`='%s ' \
342
+ ORDER BY id DESC LIMIT 1" ,
343
+ g_sSteamIDs [client ], g_sIPs [client ]
344
+ );
340
345
g_hDB .Query (OnClientPostAdminCheck_Query , queryEx , GetClientUserId (client ));
341
346
342
347
for (int i = 0 ; i < g_OfflinePlayers .Length ; i ++ ) {
@@ -372,7 +377,7 @@ public void OnClientPostAdminCheck(int client) {
372
377
}
373
378
374
379
void OnClientPostAdminCheck_Query (Database db , DBResultSet results , const char [] error , int userid ) {
375
- if (results == null || error [0 ]) {
380
+ if (! IsDBConnected () || results == null || error [0 ]) {
376
381
Kban_GiveError (ERROR_TYPE_SELECT , error );
377
382
return ;
378
383
}
@@ -389,6 +394,7 @@ void OnClientPostAdminCheck_Query(Database db, DBResultSet results, const char[]
389
394
bool isExpired = (results .FetchInt (11 ) == 0 ) ? false : true ;
390
395
bool isRemoved = (results .FetchInt (12 ) == 0 ) ? false : true ;
391
396
397
+ // Store all data results we need
392
398
Kban info ;
393
399
Kban_GetRowResults (10 , results , info );
394
400
@@ -422,6 +428,8 @@ void OnClientPostAdminCheck_Query(Database db, DBResultSet results, const char[]
422
428
423
429
isKbanned = false ;
424
430
}
431
+
432
+ g_bUserVerified [client ] = true ;
425
433
426
434
if (isKbanned ) {
427
435
g_bIsClientRestricted [client ] = true ;
@@ -463,7 +471,7 @@ void OnClientPostAdminCheck_Query(Database db, DBResultSet results, const char[]
463
471
}
464
472
465
473
void OnUpdateClientIP (Database db , DBResultSet results , const char [] error , int userid ) {
466
- if (results == null || error [0 ]) {
474
+ if (! IsDBConnected () || results == null || error [0 ]) {
467
475
Kban_GiveError (ERROR_TYPE_UPDATE , error );
468
476
return ;
469
477
}
@@ -472,15 +480,15 @@ void OnUpdateClientIP(Database db, DBResultSet results, const char[] error, int
472
480
void Kban_CallGetKbansNumber (int client ) {
473
481
char query [MAX_QUERIE_LENGTH ];
474
482
if (! g_cvGetRealKbanNumber .BoolValue ) {
475
- g_hDB .Format (query , sizeof (query ), " SELECT * FROM `KbRestrict_CurrentBans` WHERE `client_steamid`='%s '" , g_sSteamIDs [client ]);
483
+ g_hDB .Format (query , sizeof (query ), " SELECT client_steamid FROM `KbRestrict_CurrentBans` WHERE `client_steamid`='%s '" , g_sSteamIDs [client ]);
476
484
} else {
477
- g_hDB .Format (query , sizeof (query ), " SELECT * FROM `KbRestrict_CurrentBans` WHERE `client_steamid`='%s ' AND `is_removed`=0" , g_sSteamIDs [client ]);
485
+ g_hDB .Format (query , sizeof (query ), " SELECT client_steamid FROM `KbRestrict_CurrentBans` WHERE `client_steamid`='%s ' AND `is_removed`=0" , g_sSteamIDs [client ]);
478
486
}
479
487
g_hDB .Query (OnGetKbansNumber , query , GetClientUserId (client ));
480
488
}
481
489
482
490
void OnGetKbansNumber (Database db , DBResultSet results , const char [] error , int userid ) {
483
- if (results == null || error [0 ]) {
491
+ if (! IsDBConnected () || results == null || error [0 ]) {
484
492
Kban_GiveError (ERROR_TYPE_SELECT , error );
485
493
return ;
486
494
}
@@ -535,6 +543,7 @@ public void OnClientConnected(int client) {
535
543
}
536
544
537
545
// Initialize client data
546
+ g_bUserVerified [client ] = false ;
538
547
g_bIsClientRestricted [client ] = false ;
539
548
FormatEx (g_sIPs [client ], sizeof (g_sIPs []), sIP );
540
549
FormatEx (g_sSteamIDs [client ], sizeof (g_sSteamIDs []), sSteamID );
@@ -543,6 +552,11 @@ public void OnClientConnected(int client) {
543
552
if (bError || IsIPBanned (g_sIPs [client ])) {
544
553
g_bIsClientRestricted [client ] = true ;
545
554
}
555
+
556
+ // Avoid useless queries
557
+ if (IsFakeClient (client ) || IsClientSourceTV (client )) {
558
+ g_bUserVerified [client ] = true ;
559
+ }
546
560
}
547
561
548
562
public void OnClientDisconnect (int client ) {
@@ -562,6 +576,7 @@ public void OnClientDisconnect(int client) {
562
576
FormatEx (g_sName [client ], sizeof (g_sName []), " " );
563
577
FormatEx (g_sIPs [client ], sizeof (g_sIPs []), " " );
564
578
g_bIsClientRestricted [client ] = false ;
579
+ g_bUserVerified [client ] = false ;
565
580
g_iClientKbansNumber [client ] = 0 ;
566
581
}
567
582
@@ -645,6 +660,21 @@ Action CheckAllKbans_Timer(Handle timer) {
645
660
return Plugin_Handled ;
646
661
}
647
662
663
+ // Player was not verified yet, force the verification
664
+ for (int i = 1 ; i <= MaxClients ; i ++ ) {
665
+ if (! IsClientInGame (i ))
666
+ continue ;
667
+
668
+ if (g_bUserVerified [i ])
669
+ continue ;
670
+
671
+ if (IsFakeClient (i ) || IsClientSourceTV (i ))
672
+ continue ;
673
+
674
+ OnClientConnected (i );
675
+ OnClientPostAdminCheck (i );
676
+ }
677
+
648
678
for (int i = 0 ; i < g_allKbans .Length ; i ++ ) {
649
679
Kban info ;
650
680
g_allKbans .GetArray (i , info , sizeof (info ));
@@ -660,7 +690,7 @@ Action CheckAllKbans_Timer(Handle timer) {
660
690
}
661
691
662
692
void OnKbanExpired (Database db , DBResultSet results , const char [] error , int id ) {
663
- if (results == null || error [0 ]) {
693
+ if (! IsDBConnected () || results == null || error [0 ]) {
664
694
Kban_GiveError (ERROR_TYPE_UPDATE , error );
665
695
return ;
666
696
}
@@ -1101,55 +1131,6 @@ stock void CheckPlayerExpireTime(int lefttime, char[] TimeLeft, int maxlength) {
1101
1131
//----------------------------------------------------------------------------------------------------
1102
1132
// Database stuffs
1103
1133
//----------------------------------------------------------------------------------------------------
1104
- Action GetAllKbans_Timer (Handle timer ) {
1105
- if (g_hDB == null ) {
1106
- CreateTimer (1.0 , GetAllKbans_Timer );
1107
- return Plugin_Stop ;
1108
- }
1109
-
1110
- g_hDB .Query (OnGetAllKbans , " SELECT * FROM `KbRestrict_CurrentBans`" );
1111
- return Plugin_Continue ;
1112
- }
1113
-
1114
- void OnGetAllKbans (Database db , DBResultSet results , const char [] error , any data ) {
1115
- if (results == null || error [0 ]) {
1116
- Kban_GiveError (ERROR_TYPE_SELECT , error );
1117
- return ;
1118
- }
1119
-
1120
- while (results .FetchRow ()) {
1121
- bool push = false ;
1122
-
1123
- bool isExpired = (results .FetchInt (11 ) == 0 ) ? false : true ;
1124
- bool isRemoved = (results .FetchInt (12 ) == 0 ) ? false : true ;
1125
-
1126
- if (! isExpired && ! isRemoved ) {
1127
- push = true ;
1128
- }
1129
-
1130
- if (push ) {
1131
- Kban info ;
1132
- for (int i = 0 ; i <= 10 ; i ++ ) {
1133
- Kban_GetRowResults (i , results , info );
1134
- }
1135
-
1136
- g_allKbans .PushArray (info , sizeof (info ));
1137
- }
1138
- }
1139
-
1140
- /* incase of a late load */
1141
- if (g_bLate ) {
1142
- for (int i = 1 ; i <= MaxClients ; i ++ ) {
1143
- if (! IsClientInGame (i )) {
1144
- continue ;
1145
- }
1146
-
1147
- OnClientConnected (i );
1148
- OnClientPostAdminCheck (i );
1149
- }
1150
- }
1151
- }
1152
-
1153
1134
void Kban_GetRowResults (int num , DBResultSet results , Kban info ) {
1154
1135
switch (num ) {
1155
1136
case 0 : {
@@ -1232,6 +1213,8 @@ bool IsDBConnected()
1232
1213
{
1233
1214
if (g_hDB == null )
1234
1215
{
1216
+ if (! g_bConnectingToDB )
1217
+ LogError (" [Kb-Restrict] Database connection is lost, attempting to reconnect..." );
1235
1218
ConnectToDB ();
1236
1219
return false ;
1237
1220
}
@@ -1412,7 +1395,7 @@ void Kban_PublishKunban(int target, int admin, const char[] reason) {
1412
1395
}
1413
1396
1414
1397
void OnKbanRemove (Database db , DBResultSet results , const char [] error , any data ) {
1415
- if (results == null || error [0 ]) {
1398
+ if (! IsDBConnected () || results == null || error [0 ]) {
1416
1399
Kban_GiveError (ERROR_TYPE_UPDATE , error );
1417
1400
return ;
1418
1401
}
@@ -1568,13 +1551,13 @@ void OnKbanPublished(Database db, DBResultSet results, const char[] error, int a
1568
1551
LogError (" Invalid arrayIndex %d . g_allKbans has length %d ." , arrayIndex , g_allKbans .Length );
1569
1552
}
1570
1553
1571
- if (results == null || error [0 ]) {
1554
+ if (! IsDBConnected () || results == null || error [0 ]) {
1572
1555
Kban_GiveError (ERROR_TYPE_INSERT , error );
1573
1556
}
1574
1557
}
1575
1558
1576
1559
void OnKbanAdded (Database db , DBResultSet results , const char [] error , int arrayIndex ) {
1577
- if (results == null || error [0 ]) {
1560
+ if (! IsDBConnected () || results == null || error [0 ]) {
1578
1561
Kban_GiveError (ERROR_TYPE_INSERT , error );
1579
1562
return ;
1580
1563
}
@@ -1621,7 +1604,7 @@ int Kban_CheckKbanAdminAccess(int client, int time) {
1621
1604
}
1622
1605
1623
1606
void OnGetKbanID (Database db , DBResultSet results , const char [] error , int arrayIndex ) {
1624
- if (results == null || error [0 ]) {
1607
+ if (! IsDBConnected () || results == null || error [0 ]) {
1625
1608
Kban_GiveError (ERROR_TYPE_SELECT , error );
1626
1609
return ;
1627
1610
}
0 commit comments