@@ -40,6 +40,13 @@ extern ConVar tf_mm_trusted;
40
40
static ConVar tf_stats_nogameplaycheck ( " tf_stats_nogameplaycheck" , " 0" , FCVAR_NONE , " Disable normal check for valid gameplay, send stats regardless." );
41
41
// static ConVar tf_stats_track( "tf_stats_track", "1", FCVAR_NONE, "Turn on//off tf stats tracking." );
42
42
// static ConVar tf_stats_verbose( "tf_stats_verbose", "0", FCVAR_NONE, "Turn on//off verbose logging of stats." );
43
+ #ifdef BDSBASE
44
+ ConVar tf_stats_bogus_damage_max (" tf_stats_bogus_damage_max" , " 1500" , FCVAR_REPLICATED, " Maximum Damage before Bogus warning" );
45
+ ConVar tf_stats_bogus_damage_mvm_max (" tf_stats_bogus_damage_mvm_max" , " 5000" , FCVAR_REPLICATED, " Maximum Damage in MvM before Bogus warning" );
46
+ ConVar tf_stats_bogus_healing_max (" tf_stats_bogus_healing_max" , " 1000" , FCVAR_REPLICATED, " Maximum Healing before Bogus warning" );
47
+ ConVar tf_stats_bogus_block_damage_max (" tf_stats_bogus_block_damage_max" , " 3000" , FCVAR_REPLICATED, " Maximum Damage Blocked before Bogus warning" );
48
+ ConVar tf_stats_bogus_return (" tf_stats_bogus_return" , " 1" , FCVAR_REPLICATED, " Return without recording stats if bogus values are found" );
49
+ #endif
43
50
44
51
CTFGameStats CTF_GameStats;
45
52
@@ -719,11 +726,28 @@ void CTFGameStats::Event_PlayerHealedOther( CTFPlayer *pPlayer, float amount )
719
726
// make sure value is sane
720
727
int iAmount = (int ) amount;
721
728
Assert ( iAmount >= 0 );
729
+ #ifdef BDSBASE
730
+ Assert (iAmount <= tf_stats_bogus_healing_max.GetInt ());
731
+ if (iAmount < 0 || iAmount > tf_stats_bogus_healing_max.GetInt ())
732
+ #else
722
733
Assert ( iAmount <= 1000 );
723
734
if ( iAmount < 0 || iAmount > 1000 )
735
+ #endif
724
736
{
737
+ #ifdef BDSBASE
738
+ if (tf_stats_bogus_return.GetBool ())
739
+ {
740
+ DevMsg (" CTFGameStats: Bogus Healing value found, %d, ignoring\n " , iAmount);
741
+ return ;
742
+ }
743
+ else
744
+ {
745
+ DevMsg (" CTFGameStats: Bogus Healing value found, %d\n " , iAmount);
746
+ }
747
+ #else
725
748
DevMsg ( " CTFGameStats: bogus healing value of %d reported, ignoring\n " , iAmount );
726
749
return ;
750
+ #endif
727
751
}
728
752
IncrementStat ( pPlayer, TFSTAT_HEALING, (int ) amount );
729
753
@@ -755,11 +779,28 @@ void CTFGameStats::Event_PlayerHealedOtherAssist( CTFPlayer *pPlayer, float amou
755
779
// make sure value is sane
756
780
int iAmount = (int ) amount;
757
781
Assert ( iAmount >= 0 );
782
+ #ifdef BDSBASE
783
+ Assert (iAmount <= tf_stats_bogus_healing_max.GetInt ());
784
+ if (iAmount < 0 || iAmount > tf_stats_bogus_healing_max.GetInt ())
785
+ #else
758
786
Assert ( iAmount <= 1000 );
759
787
if ( iAmount < 0 || iAmount > 1000 )
788
+ #endif
760
789
{
790
+ #ifdef BDSBASE
791
+ if (tf_stats_bogus_return.GetBool ())
792
+ {
793
+ DevMsg (" CTFGameStats: Bogus Healing value found, %d, ignoring\n " , iAmount);
794
+ return ;
795
+ }
796
+ else
797
+ {
798
+ DevMsg (" CTFGameStats: Bogus Healing value found, %d\n " , iAmount);
799
+ }
800
+ #else
761
801
DevMsg ( " CTFGameStats: bogus healing value of %d reported, ignoring\n " , iAmount );
762
802
return ;
803
+ #endif
763
804
}
764
805
IncrementStat ( pPlayer, TFSTAT_HEALING_ASSIST, (int ) amount );
765
806
}
@@ -769,11 +810,28 @@ void CTFGameStats::Event_PlayerHealedOtherAssist( CTFPlayer *pPlayer, float amou
769
810
// -----------------------------------------------------------------------------
770
811
void CTFGameStats::Event_PlayerBlockedDamage ( CTFPlayer *pPlayer, int nAmount )
771
812
{
813
+ #ifdef BDSBASE
814
+ Assert (pPlayer && nAmount > 0 && nAmount < tf_stats_bogus_block_damage_max.GetInt ());
815
+ if (nAmount < 0 || nAmount > tf_stats_bogus_block_damage_max.GetInt ())
816
+ #else
772
817
Assert ( pPlayer && nAmount > 0 && nAmount < 3000 );
773
818
if ( nAmount < 0 || nAmount > 3000 )
819
+ #endif
774
820
{
821
+ #ifdef BDSBASE
822
+ if (tf_stats_bogus_return.GetBool ())
823
+ {
824
+ DevMsg (" CTFGameStats: Bogus Blocked Damage value found, %d, ignoring\n " , nAmount);
825
+ return ;
826
+ }
827
+ else
828
+ {
829
+ DevMsg (" CTFGameStats: Bogus Blocked Damage value found, %d\n " , nAmount);
830
+ }
831
+ #else
775
832
DevMsg ( " CTFGameStats: bogus blocked damage value of %d reported, ignoring\n " , nAmount );
776
833
return ;
834
+ #endif
777
835
}
778
836
IncrementStat ( pPlayer, TFSTAT_DAMAGE_BLOCKED, nAmount );
779
837
}
@@ -1033,15 +1091,38 @@ void CTFGameStats::Event_PlayerFiredWeapon( CTFPlayer *pPlayer, bool bCritical )
1033
1091
void CTFGameStats::Event_PlayerDamage ( CBasePlayer *pBasePlayer, const CTakeDamageInfo &info, int iDamageTaken )
1034
1092
{
1035
1093
// defensive guard against insanely huge damage values that apparently get into the stats system once in a while -- ignore insane values
1094
+ #ifdef BDSBASE
1095
+ int INSANE_PLAYER_DAMAGE = TFGameRules ()->IsMannVsMachineMode () ? tf_stats_bogus_damage_mvm_max.GetFloat () : tf_stats_bogus_damage_max.GetFloat ();
1096
+ #else
1036
1097
const int INSANE_PLAYER_DAMAGE = TFGameRules ()->IsMannVsMachineMode () ? 5000 : 1500 ;
1098
+ #endif
1037
1099
1038
1100
if ( sv_cheats && !sv_cheats->GetBool () )
1039
1101
{
1040
1102
Assert ( iDamageTaken >= 0 );
1041
1103
}
1104
+ #ifdef BDSBASE
1105
+ if ((iDamageTaken < 0 ))
1106
+ #else
1042
1107
if ( ( iDamageTaken < 0 ) || ( iDamageTaken > INSANE_PLAYER_DAMAGE ) )
1108
+ #endif
1043
1109
return ;
1044
1110
1111
+ #ifdef BDSBASE
1112
+ if (iDamageTaken > INSANE_PLAYER_DAMAGE)
1113
+ {
1114
+ if (tf_stats_bogus_return.GetBool ())
1115
+ {
1116
+ DevMsg (" CTFGameStats: Bogus Damage value found, %d, ignoring\n " , iDamageTaken);
1117
+ return ;
1118
+ }
1119
+ else
1120
+ {
1121
+ DevMsg (" CTFGameStats: Bogus Damage value found, %d\n " , iDamageTaken);
1122
+ }
1123
+ }
1124
+ #endif
1125
+
1045
1126
CObjectSentrygun *pSentry = NULL ;
1046
1127
CTFPlayer *pTarget = ToTFPlayer ( pBasePlayer );
1047
1128
CTFPlayer *pAttacker = ToTFPlayer ( info.GetAttacker () );
0 commit comments