Counter Strike : Global Offensive Source Code
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

496 lines
43 KiB

  1. //====== Copyright � 1996-2006, Valve Corporation, All rights reserved. =======//
  2. //
  3. // Purpose:
  4. //
  5. //=============================================================================//
  6. #include "cbase.h"
  7. #ifdef GAME_DLL
  8. #include "GameStats.h"
  9. #endif
  10. #include "cs_gamestats_shared.h"
  11. // NOTE: This has to be the last file included!
  12. #include "tier0/memdbgon.h"
  13. // note: We don't log match stats for any maps with CSSTAT_UNDEFINED for matchID
  14. const MapName_MapStatId MapName_StatId_Table[] =
  15. {
  16. {"cs_assault", CSSTAT_MAP_WINS_CS_ASSAULT, CSSTAT_MAP_ROUNDS_CS_ASSAULT, CSSTAT_UNDEFINED },
  17. {"cs_italy", CSSTAT_MAP_WINS_CS_ITALY, CSSTAT_MAP_ROUNDS_CS_ITALY, CSSTAT_UNDEFINED },
  18. {"cs_office", CSSTAT_MAP_WINS_CS_OFFICE, CSSTAT_MAP_ROUNDS_CS_OFFICE, CSSTAT_UNDEFINED },
  19. {"cs_militia", CSSTAT_MAP_WINS_CS_MILITIA, CSSTAT_MAP_ROUNDS_CS_MILITIA, CSSTAT_UNDEFINED },
  20. {"de_aztec", CSSTAT_MAP_WINS_DE_AZTEC, CSSTAT_MAP_ROUNDS_DE_AZTEC, CSSTAT_UNDEFINED },
  21. {"de_cbble", CSSTAT_MAP_WINS_DE_CBBLE, CSSTAT_MAP_ROUNDS_DE_CBBLE, CSSTAT_UNDEFINED },
  22. {"de_dust2", CSSTAT_MAP_WINS_DE_DUST2, CSSTAT_MAP_ROUNDS_DE_DUST2, CSSTAT_UNDEFINED },
  23. {"de_dust", CSSTAT_MAP_WINS_DE_DUST, CSSTAT_MAP_ROUNDS_DE_DUST, CSSTAT_UNDEFINED },
  24. {"de_inferno", CSSTAT_MAP_WINS_DE_INFERNO, CSSTAT_MAP_ROUNDS_DE_INFERNO, CSSTAT_UNDEFINED },
  25. {"de_nuke", CSSTAT_MAP_WINS_DE_NUKE, CSSTAT_MAP_ROUNDS_DE_NUKE, CSSTAT_UNDEFINED },
  26. {"de_piranesi", CSSTAT_MAP_WINS_DE_PIRANESI, CSSTAT_MAP_ROUNDS_DE_PIRANESI, CSSTAT_UNDEFINED },
  27. {"de_prodigy", CSSTAT_MAP_WINS_DE_PRODIGY, CSSTAT_MAP_ROUNDS_DE_PRODIGY, CSSTAT_UNDEFINED },
  28. {"de_lake", CSSTAT_MAP_WINS_DE_LAKE, CSSTAT_MAP_ROUNDS_DE_LAKE, CSSTAT_MAP_MATCHES_WON_LAKE },
  29. {"de_safehouse",CSSTAT_MAP_WINS_DE_SAFEHOUSE, CSSTAT_MAP_ROUNDS_DE_SAFEHOUSE, CSSTAT_MAP_MATCHES_WON_SAFEHOUSE},
  30. {"de_shorttrain",CSSTAT_MAP_WINS_DE_SHORTTRAIN, CSSTAT_MAP_ROUNDS_DE_SHORTTRAIN, CSSTAT_MAP_MATCHES_WON_SHORTTRAIN },
  31. {"de_sugarcane",CSSTAT_MAP_WINS_DE_SUGARCANE, CSSTAT_MAP_ROUNDS_DE_SUGARCANE, CSSTAT_MAP_MATCHES_WON_SUGARCANE },
  32. {"de_stmarc", CSSTAT_MAP_WINS_DE_STMARC, CSSTAT_MAP_ROUNDS_DE_STMARC, CSSTAT_MAP_MATCHES_WON_STMARC },
  33. {"de_bank", CSSTAT_MAP_WINS_DE_BANK, CSSTAT_MAP_ROUNDS_DE_BANK, CSSTAT_MAP_MATCHES_WON_BANK },
  34. {"de_embassy", CSSTAT_MAP_WINS_DE_EMBASSY, CSSTAT_MAP_ROUNDS_DE_EMBASSY, CSSTAT_MAP_MATCHES_WON_EMBASSY },
  35. {"de_depot", CSSTAT_MAP_WINS_DE_DEPOT, CSSTAT_MAP_ROUNDS_DE_DEPOT, CSSTAT_MAP_MATCHES_WON_DEPOT },
  36. {"de_vertigo", CSSTAT_MAP_WINS_DE_VERTIGO, CSSTAT_MAP_ROUNDS_DE_VERTIGO, CSSTAT_UNDEFINED},
  37. {"de_balkan", CSSTAT_MAP_WINS_DE_BALKAN, CSSTAT_MAP_ROUNDS_DE_BALKAN, CSSTAT_UNDEFINED},
  38. {"ar_monastery",CSSTAT_MAP_WINS_AR_MONASTERY, CSSTAT_MAP_ROUNDS_AR_MONASTERY, CSSTAT_UNDEFINED},
  39. {"ar_shoots", CSSTAT_MAP_WINS_AR_SHOOTS, CSSTAT_MAP_ROUNDS_AR_SHOOTS, CSSTAT_MAP_MATCHES_WON_SHOOTS},
  40. {"ar_baggage", CSSTAT_MAP_WINS_AR_BAGGAGE, CSSTAT_MAP_ROUNDS_AR_BAGGAGE,CSSTAT_MAP_MATCHES_WON_BAGGAGE},
  41. {"de_train", CSSTAT_MAP_WINS_DE_TRAIN, CSSTAT_MAP_ROUNDS_DE_TRAIN, CSSTAT_MAP_MATCHES_WON_TRAIN },
  42. {"", CSSTAT_UNDEFINED, CSSTAT_UNDEFINED, CSSTAT_UNDEFINED },
  43. };
  44. const WeaponName_StatId WeaponName_StatId_Table[] =
  45. {
  46. { WEAPON_DEAGLE, CSSTAT_KILLS_DEAGLE, CSSTAT_SHOTS_DEAGLE, CSSTAT_HITS_DEAGLE, CSSTAT_DAMAGE_DEAGLE },
  47. { WEAPON_USP, CSSTAT_KILLS_USP, CSSTAT_SHOTS_USP, CSSTAT_HITS_USP, CSSTAT_DAMAGE_USP },
  48. { WEAPON_GLOCK, CSSTAT_KILLS_GLOCK, CSSTAT_SHOTS_GLOCK, CSSTAT_HITS_GLOCK, CSSTAT_DAMAGE_GLOCK },
  49. { WEAPON_P228, CSSTAT_KILLS_P228, CSSTAT_SHOTS_P228, CSSTAT_HITS_P228, CSSTAT_DAMAGE_P228 },
  50. { WEAPON_ELITE, CSSTAT_KILLS_ELITE, CSSTAT_SHOTS_ELITE, CSSTAT_HITS_ELITE, CSSTAT_DAMAGE_ELITE },
  51. { WEAPON_FIVESEVEN, CSSTAT_KILLS_FIVESEVEN, CSSTAT_SHOTS_FIVESEVEN, CSSTAT_HITS_FIVESEVEN, CSSTAT_DAMAGE_FIVESEVEN },
  52. { WEAPON_AWP, CSSTAT_KILLS_AWP, CSSTAT_SHOTS_AWP, CSSTAT_HITS_AWP, CSSTAT_DAMAGE_AWP },
  53. { WEAPON_AK47, CSSTAT_KILLS_AK47, CSSTAT_SHOTS_AK47, CSSTAT_HITS_AK47, CSSTAT_DAMAGE_AK47 },
  54. { WEAPON_M4A1, CSSTAT_KILLS_M4A1, CSSTAT_SHOTS_M4A1, CSSTAT_HITS_M4A1, CSSTAT_DAMAGE_M4A1 },
  55. { WEAPON_AUG, CSSTAT_KILLS_AUG, CSSTAT_SHOTS_AUG, CSSTAT_HITS_AUG, CSSTAT_DAMAGE_AUG },
  56. { WEAPON_SG552, CSSTAT_KILLS_SG552, CSSTAT_SHOTS_SG552, CSSTAT_HITS_SG552, CSSTAT_DAMAGE_SG552 },
  57. { WEAPON_SG550, CSSTAT_KILLS_SG550, CSSTAT_SHOTS_SG550, CSSTAT_HITS_SG550, CSSTAT_DAMAGE_SG550 },
  58. { WEAPON_GALIL, CSSTAT_KILLS_GALIL, CSSTAT_SHOTS_GALIL, CSSTAT_HITS_GALIL, CSSTAT_DAMAGE_GALIL },
  59. { WEAPON_GALILAR, CSSTAT_KILLS_GALILAR, CSSTAT_SHOTS_GALILAR, CSSTAT_HITS_GALILAR, CSSTAT_DAMAGE_GALILAR },
  60. { WEAPON_FAMAS, CSSTAT_KILLS_FAMAS, CSSTAT_SHOTS_FAMAS, CSSTAT_HITS_FAMAS, CSSTAT_DAMAGE_FAMAS },
  61. { WEAPON_SCOUT, CSSTAT_KILLS_SCOUT, CSSTAT_SHOTS_SCOUT, CSSTAT_HITS_SCOUT, CSSTAT_DAMAGE_SCOUT },
  62. { WEAPON_G3SG1, CSSTAT_KILLS_G3SG1, CSSTAT_SHOTS_G3SG1, CSSTAT_HITS_G3SG1, CSSTAT_DAMAGE_G3SG1 },
  63. { WEAPON_P90, CSSTAT_KILLS_P90, CSSTAT_SHOTS_P90, CSSTAT_HITS_P90, CSSTAT_DAMAGE_P90 },
  64. { WEAPON_MP5NAVY, CSSTAT_KILLS_MP5NAVY, CSSTAT_SHOTS_MP5NAVY, CSSTAT_HITS_MP5NAVY, CSSTAT_DAMAGE_MP5NAVY },
  65. { WEAPON_TMP, CSSTAT_KILLS_TMP, CSSTAT_SHOTS_TMP, CSSTAT_HITS_TMP, CSSTAT_DAMAGE_TMP },
  66. { WEAPON_MAC10, CSSTAT_KILLS_MAC10, CSSTAT_SHOTS_MAC10, CSSTAT_HITS_MAC10, CSSTAT_DAMAGE_MAC10 },
  67. { WEAPON_UMP45, CSSTAT_KILLS_UMP45, CSSTAT_SHOTS_UMP45, CSSTAT_HITS_UMP45, CSSTAT_DAMAGE_UMP45 },
  68. { WEAPON_M3, CSSTAT_KILLS_M3, CSSTAT_SHOTS_M3, CSSTAT_HITS_M3, CSSTAT_DAMAGE_M3 },
  69. { WEAPON_XM1014, CSSTAT_KILLS_XM1014, CSSTAT_SHOTS_XM1014, CSSTAT_HITS_XM1014, CSSTAT_DAMAGE_XM1014 },
  70. { WEAPON_M249, CSSTAT_KILLS_M249, CSSTAT_SHOTS_M249, CSSTAT_HITS_M249, CSSTAT_DAMAGE_M249 },
  71. { WEAPON_KNIFE_GG, CSSTAT_KILLS_KNIFE, CSSTAT_UNDEFINED, CSSTAT_UNDEFINED, CSSTAT_UNDEFINED },
  72. { WEAPON_KNIFE, CSSTAT_KILLS_KNIFE, CSSTAT_UNDEFINED, CSSTAT_UNDEFINED, CSSTAT_UNDEFINED },
  73. { WEAPON_HEGRENADE, CSSTAT_KILLS_HEGRENADE, CSSTAT_UNDEFINED, CSSTAT_UNDEFINED, CSSTAT_UNDEFINED },
  74. { WEAPON_MOLOTOV, CSSTAT_KILLS_MOLOTOV, CSSTAT_UNDEFINED, CSSTAT_UNDEFINED, CSSTAT_UNDEFINED },
  75. { WEAPON_INCGRENADE, CSSTAT_KILLS_MOLOTOV, CSSTAT_UNDEFINED, CSSTAT_UNDEFINED, CSSTAT_UNDEFINED },
  76. { WEAPON_DECOY, CSSTAT_KILLS_DECOY, CSSTAT_UNDEFINED, CSSTAT_UNDEFINED, CSSTAT_UNDEFINED },
  77. { WEAPON_BIZON, CSSTAT_KILLS_BIZON, CSSTAT_SHOTS_BIZON, CSSTAT_HITS_BIZON, CSSTAT_DAMAGE_BIZON },
  78. { WEAPON_MAG7, CSSTAT_KILLS_MAG7, CSSTAT_SHOTS_MAG7, CSSTAT_HITS_MAG7, CSSTAT_DAMAGE_MAG7 },
  79. { WEAPON_NEGEV, CSSTAT_KILLS_NEGEV, CSSTAT_SHOTS_NEGEV, CSSTAT_HITS_NEGEV, CSSTAT_DAMAGE_NEGEV },
  80. { WEAPON_SAWEDOFF, CSSTAT_KILLS_SAWEDOFF, CSSTAT_SHOTS_SAWEDOFF, CSSTAT_HITS_SAWEDOFF, CSSTAT_DAMAGE_SAWEDOFF },
  81. { WEAPON_TEC9, CSSTAT_KILLS_TEC9, CSSTAT_SHOTS_TEC9, CSSTAT_HITS_TEC9, CSSTAT_DAMAGE_TEC9 },
  82. { WEAPON_TASER, CSSTAT_KILLS_TASER, CSSTAT_SHOTS_TASER, CSSTAT_HITS_TASER, CSSTAT_DAMAGE_TASER },
  83. { WEAPON_HKP2000, CSSTAT_KILLS_HKP2000, CSSTAT_SHOTS_HKP2000, CSSTAT_HITS_HKP2000, CSSTAT_DAMAGE_HKP2000 },
  84. { WEAPON_MP7, CSSTAT_KILLS_MP7, CSSTAT_SHOTS_MP7, CSSTAT_HITS_MP7, CSSTAT_DAMAGE_MP7 },
  85. { WEAPON_MP9, CSSTAT_KILLS_MP9, CSSTAT_SHOTS_MP9, CSSTAT_HITS_MP9, CSSTAT_DAMAGE_MP9 },
  86. { WEAPON_NOVA, CSSTAT_KILLS_NOVA, CSSTAT_SHOTS_NOVA, CSSTAT_HITS_NOVA, CSSTAT_DAMAGE_NOVA },
  87. { WEAPON_P250, CSSTAT_KILLS_P250, CSSTAT_SHOTS_P250, CSSTAT_HITS_P250, CSSTAT_DAMAGE_P250 },
  88. { WEAPON_SCAR17, CSSTAT_KILLS_SCAR17, CSSTAT_SHOTS_SCAR17, CSSTAT_HITS_SCAR17, CSSTAT_DAMAGE_SCAR17 },
  89. { WEAPON_SCAR20, CSSTAT_KILLS_SCAR20, CSSTAT_SHOTS_SCAR20, CSSTAT_HITS_SCAR20, CSSTAT_DAMAGE_SCAR20 },
  90. { WEAPON_SG556, CSSTAT_KILLS_SG556, CSSTAT_SHOTS_SG556, CSSTAT_HITS_SG556, CSSTAT_DAMAGE_SG556 },
  91. { WEAPON_SSG08, CSSTAT_KILLS_SSG08, CSSTAT_SHOTS_SSG08, CSSTAT_HITS_SSG08, CSSTAT_DAMAGE_SSG08 },
  92. { WEAPON_NONE, CSSTAT_UNDEFINED, CSSTAT_UNDEFINED, CSSTAT_UNDEFINED, CSSTAT_UNDEFINED }, // This is a sentinel value so we can loop through all the stats
  93. // { WEAPON_SENSORGRENADE, CSSTAT_KILLS_SENSOR, CSSTAT_UNDEFINED, CSSTAT_UNDEFINED, CSSTAT_UNDEFINED },
  94. };
  95. struct CSStatProperty_Init
  96. {
  97. int statId;
  98. CSStatProperty statProperty;
  99. // const char* szSteamName; // name of the stat on steam
  100. // const char* szLocalizationToken; // localization token for the stat
  101. // uint flags; // priority flags for sending to client
  102. };
  103. CSStatProperty_Init CSStatProperty_Table_Init[] =
  104. {
  105. // StatId Steam Name Localization Token Client Update Priority
  106. { CSSTAT_SHOTS_HIT, "total_shots_hit", "#GAMEUI_Stat_NumHits", CSSTAT_PRIORITY_LOW, },
  107. { CSSTAT_SHOTS_FIRED, "total_shots_fired", "#GAMEUI_Stat_NumShots", CSSTAT_PRIORITY_LOW, },
  108. { CSSTAT_KILLS, "total_kills", "#GAMEUI_Stat_NumKills", CSSTAT_PRIORITY_HIGH, },
  109. { CSSTAT_DEATHS, "total_deaths", "#GAMEUI_Stat_NumDeaths", CSSTAT_PRIORITY_HIGH, },
  110. { CSSTAT_DAMAGE, "total_damage_done", "#GAMEUI_Stat_DamageDone", CSSTAT_PRIORITY_LOW, },
  111. { CSSTAT_NUM_BOMBS_PLANTED, "total_planted_bombs", "#GAMEUI_Stat_NumPlantedBombs", CSSTAT_PRIORITY_LOW, },
  112. { CSSTAT_NUM_BOMBS_DEFUSED, "total_defused_bombs", "#GAMEUI_Stat_NumDefusedBombs", CSSTAT_PRIORITY_LOW, },
  113. { CSSTAT_TR_NUM_BOMBS_PLANTED, "total_TR_planted_bombs", "#GAMEUI_Stat_TR_NumPlantedBombs", CSSTAT_PRIORITY_LOW, },
  114. { CSSTAT_TR_NUM_BOMBS_DEFUSED, "total_TR_defused_bombs", "#GAMEUI_Stat_TR_NumDefusedBombs", CSSTAT_PRIORITY_LOW, },
  115. { CSSTAT_PLAYTIME, "total_time_played", "#GAMEUI_Stat_TimePlayed", CSSTAT_PRIORITY_LOW, },
  116. { CSSTAT_ROUNDS_WON, "total_wins", "#GAMEUI_Stat_TotalWins", CSSTAT_PRIORITY_ENDROUND, },
  117. { CSSTAT_T_ROUNDS_WON, NULL, NULL, CSSTAT_PRIORITY_ENDROUND, },
  118. { CSSTAT_CT_ROUNDS_WON, NULL, NULL, CSSTAT_PRIORITY_ENDROUND, },
  119. { CSSTAT_ROUNDS_PLAYED, "total_rounds_played", "#GAMEUI_Stat_TotalRounds", CSSTAT_PRIORITY_ENDROUND, },
  120. { CSSTAT_PISTOLROUNDS_WON, "total_wins_pistolround", "#GAMEUI_Stat_PistolRoundWins", CSSTAT_PRIORITY_ENDROUND, },
  121. { CSTAT_GUNGAME_ROUNDS_WON, "total_gun_game_rounds_won", "#GAMEUI_Stat_gun_game_rounds_won", CSSTAT_PRIORITY_ENDROUND, },
  122. { CSTAT_GUNGAME_ROUNDS_PLAYED, "total_gun_game_rounds_played", "#GAMEUI_Stat_gun_game_rounds_played", CSSTAT_PRIORITY_ENDROUND, },
  123. { CSSTAT_MONEY_EARNED, "total_money_earned", "#GAMEUI_Stat_MoneyEarned", CSSTAT_PRIORITY_LOW, },
  124. { CSSTAT_OBJECTIVES_COMPLETED, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  125. { CSSTAT_BOMBS_DEFUSED_WITHKIT, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  126. { CSSTAT_KILLS_DEAGLE, "total_kills_deagle", "#GAMEUI_Stat_DeagleKills", CSSTAT_PRIORITY_HIGH, },
  127. { CSSTAT_KILLS_USP, "total_kills_usp", "#GAMEUI_Stat_USPKills", CSSTAT_PRIORITY_HIGH, },
  128. { CSSTAT_KILLS_GLOCK, "total_kills_glock", "#GAMEUI_Stat_GlockKills", CSSTAT_PRIORITY_HIGH, },
  129. { CSSTAT_KILLS_P228, "total_kills_p228", "#GAMEUI_Stat_P228Kills", CSSTAT_PRIORITY_HIGH, },
  130. { CSSTAT_KILLS_ELITE, "total_kills_elite", "#GAMEUI_Stat_EliteKills", CSSTAT_PRIORITY_HIGH, },
  131. { CSSTAT_KILLS_FIVESEVEN, "total_kills_fiveseven", "#GAMEUI_Stat_FiveSevenKills", CSSTAT_PRIORITY_HIGH, },
  132. { CSSTAT_KILLS_AWP, "total_kills_awp", "#GAMEUI_Stat_AWPKills", CSSTAT_PRIORITY_HIGH, },
  133. { CSSTAT_KILLS_AK47, "total_kills_ak47", "#GAMEUI_Stat_AK47Kills", CSSTAT_PRIORITY_HIGH, },
  134. { CSSTAT_KILLS_M4A1, "total_kills_m4a1", "#GAMEUI_Stat_M4A1Kills", CSSTAT_PRIORITY_HIGH, },
  135. { CSSTAT_KILLS_AUG, "total_kills_aug", "#GAMEUI_Stat_AUGKills", CSSTAT_PRIORITY_HIGH, },
  136. { CSSTAT_KILLS_SG552, "total_kills_sg552", "#GAMEUI_Stat_SG552Kills", CSSTAT_PRIORITY_HIGH, },
  137. { CSSTAT_KILLS_SG550, "total_kills_sg550", "#GAMEUI_Stat_SG550Kills", CSSTAT_PRIORITY_HIGH, },
  138. { CSSTAT_KILLS_GALIL, "total_kills_galil", "#GAMEUI_Stat_GALILKills", CSSTAT_PRIORITY_HIGH, },
  139. { CSSTAT_KILLS_GALILAR, "total_kills_galilar", "#GAMEUI_Stat_GALILARKills", CSSTAT_PRIORITY_HIGH, },
  140. { CSSTAT_KILLS_FAMAS, "total_kills_famas", "#GAMEUI_Stat_FAMASKills", CSSTAT_PRIORITY_HIGH, },
  141. { CSSTAT_KILLS_SCOUT, "total_kills_scout", "#GAMEUI_Stat_ScoutKills", CSSTAT_PRIORITY_HIGH, },
  142. { CSSTAT_KILLS_G3SG1, "total_kills_g3sg1", "#GAMEUI_Stat_G3SG1Kills", CSSTAT_PRIORITY_HIGH, },
  143. { CSSTAT_KILLS_P90, "total_kills_p90", "#GAMEUI_Stat_P90Kills", CSSTAT_PRIORITY_HIGH, },
  144. { CSSTAT_KILLS_MP5NAVY, "total_kills_mp5navy", "#GAMEUI_Stat_MP5NavyKills", CSSTAT_PRIORITY_HIGH, },
  145. { CSSTAT_KILLS_TMP, "total_kills_tmp", "#GAMEUI_Stat_TMPKills", CSSTAT_PRIORITY_HIGH, },
  146. { CSSTAT_KILLS_MAC10, "total_kills_mac10", "#GAMEUI_Stat_MAC10Kills", CSSTAT_PRIORITY_HIGH, },
  147. { CSSTAT_KILLS_UMP45, "total_kills_ump45", "#GAMEUI_Stat_UMP45Kills", CSSTAT_PRIORITY_HIGH, },
  148. { CSSTAT_KILLS_M3, "total_kills_m3", "#GAMEUI_Stat_M3Kills", CSSTAT_PRIORITY_HIGH, },
  149. { CSSTAT_KILLS_XM1014, "total_kills_xm1014", "#GAMEUI_Stat_XM1014Kills", CSSTAT_PRIORITY_HIGH, },
  150. { CSSTAT_KILLS_M249, "total_kills_m249", "#GAMEUI_Stat_M249Kills", CSSTAT_PRIORITY_HIGH, },
  151. { CSSTAT_KILLS_KNIFE, "total_kills_knife", "#GAMEUI_Stat_KnifeKills", CSSTAT_PRIORITY_HIGH, },
  152. { CSSTAT_KILLS_HEGRENADE, "total_kills_hegrenade", "#GAMEUI_Stat_HEGrenadeKills", CSSTAT_PRIORITY_HIGH, },
  153. { CSSTAT_KILLS_MOLOTOV, "total_kills_molotov", "#GAMEUI_Stat_MolotovKills", CSSTAT_PRIORITY_HIGH, },
  154. { CSSTAT_KILLS_DECOY, "total_kills_decoy", "#GAMEUI_Stat_DecoyKills", CSSTAT_PRIORITY_HIGH, },
  155. { CSSTAT_KILLS_BIZON, "total_kills_bizon", "#GAMEUI_Stat_BIZONKills", CSSTAT_PRIORITY_HIGH, },
  156. { CSSTAT_KILLS_MAG7, "total_kills_mag7", "#GAMEUI_Stat_MAG7Kills", CSSTAT_PRIORITY_HIGH, },
  157. { CSSTAT_KILLS_NEGEV, "total_kills_negev", "#GAMEUI_Stat_NEGEVKills", CSSTAT_PRIORITY_HIGH, },
  158. { CSSTAT_KILLS_SAWEDOFF, "total_kills_sawedoff", "#GAMEUI_Stat_SAWEDOFFKills", CSSTAT_PRIORITY_HIGH, },
  159. { CSSTAT_KILLS_TEC9, "total_kills_tec9", "#GAMEUI_Stat_TEC9Kills", CSSTAT_PRIORITY_HIGH, },
  160. { CSSTAT_KILLS_TASER, "total_kills_taser", "#GAMEUI_Stat_TASERKills", CSSTAT_PRIORITY_HIGH, },
  161. { CSSTAT_KILLS_HKP2000, "total_kills_hkp2000", "#GAMEUI_Stat_HKP2000Kills", CSSTAT_PRIORITY_HIGH, },
  162. { CSSTAT_KILLS_MP7, "total_kills_mp7", "#GAMEUI_Stat_MP7Kills", CSSTAT_PRIORITY_HIGH, },
  163. { CSSTAT_KILLS_MP9, "total_kills_mp9", "#GAMEUI_Stat_MP9Kills", CSSTAT_PRIORITY_HIGH, },
  164. { CSSTAT_KILLS_NOVA, "total_kills_nova", "#GAMEUI_Stat_NovaKills", CSSTAT_PRIORITY_HIGH, },
  165. { CSSTAT_KILLS_P250, "total_kills_p250", "#GAMEUI_Stat_P250Kills", CSSTAT_PRIORITY_HIGH, },
  166. { CSSTAT_KILLS_SCAR17, "total_kills_scar17", "#GAMEUI_Stat_SCAR17Kills", CSSTAT_PRIORITY_HIGH, },
  167. { CSSTAT_KILLS_SCAR20, "total_kills_scar20", "#GAMEUI_Stat_SCAR20Kills", CSSTAT_PRIORITY_HIGH, },
  168. { CSSTAT_KILLS_SG556, "total_kills_sg556", "#GAMEUI_Stat_SG556Kills", CSSTAT_PRIORITY_HIGH, },
  169. { CSSTAT_KILLS_SSG08, "total_kills_ssg08", "#GAMEUI_Stat_SSG08Kills", CSSTAT_PRIORITY_HIGH, },
  170. { CSSTAT_SHOTS_DEAGLE, "total_shots_deagle", "#GAMEUI_Stat_DeagleShots", CSSTAT_PRIORITY_LOW, },
  171. { CSSTAT_SHOTS_USP, "total_shots_usp", "#GAMEUI_Stat_USPShots", CSSTAT_PRIORITY_LOW, },
  172. { CSSTAT_SHOTS_GLOCK, "total_shots_glock", "#GAMEUI_Stat_GlockShots", CSSTAT_PRIORITY_LOW, },
  173. { CSSTAT_SHOTS_P228, "total_shots_p228", "#GAMEUI_Stat_P228Shots", CSSTAT_PRIORITY_LOW, },
  174. { CSSTAT_SHOTS_ELITE, "total_shots_elite", "#GAMEUI_Stat_EliteShots", CSSTAT_PRIORITY_LOW, },
  175. { CSSTAT_SHOTS_FIVESEVEN, "total_shots_fiveseven", "#GAMEUI_Stat_FiveSevenShots", CSSTAT_PRIORITY_LOW, },
  176. { CSSTAT_SHOTS_AWP, "total_shots_awp", "#GAMEUI_Stat_AWPShots", CSSTAT_PRIORITY_LOW, },
  177. { CSSTAT_SHOTS_AK47, "total_shots_ak47", "#GAMEUI_Stat_AK47Shots", CSSTAT_PRIORITY_LOW, },
  178. { CSSTAT_SHOTS_M4A1, "total_shots_m4a1", "#GAMEUI_Stat_M4A1Shots", CSSTAT_PRIORITY_LOW, },
  179. { CSSTAT_SHOTS_AUG, "total_shots_aug", "#GAMEUI_Stat_AUGShots", CSSTAT_PRIORITY_LOW, },
  180. { CSSTAT_SHOTS_SG552, "total_shots_sg552", "#GAMEUI_Stat_SG552Shots", CSSTAT_PRIORITY_LOW, },
  181. { CSSTAT_SHOTS_SG550, "total_shots_sg550", "#GAMEUI_Stat_SG550Shots", CSSTAT_PRIORITY_LOW, },
  182. { CSSTAT_SHOTS_GALIL, "total_shots_galil", "#GAMEUI_Stat_GALILShots", CSSTAT_PRIORITY_LOW, },
  183. { CSSTAT_SHOTS_GALILAR, "total_shots_galilar", "#GAMEUI_Stat_GALILARShots", CSSTAT_PRIORITY_LOW, },
  184. { CSSTAT_SHOTS_FAMAS, "total_shots_famas", "#GAMEUI_Stat_FAMASShots", CSSTAT_PRIORITY_LOW, },
  185. { CSSTAT_SHOTS_SCOUT, "total_shots_scout", "#GAMEUI_Stat_ScoutShots", CSSTAT_PRIORITY_LOW, },
  186. { CSSTAT_SHOTS_G3SG1, "total_shots_g3sg1", "#GAMEUI_Stat_G3SG1Shots", CSSTAT_PRIORITY_LOW, },
  187. { CSSTAT_SHOTS_P90, "total_shots_p90", "#GAMEUI_Stat_P90Shots", CSSTAT_PRIORITY_LOW, },
  188. { CSSTAT_SHOTS_MP5NAVY, "total_shots_mp5navy", "#GAMEUI_Stat_MP5NavyShots", CSSTAT_PRIORITY_LOW, },
  189. { CSSTAT_SHOTS_TMP, "total_shots_tmp", "#GAMEUI_Stat_TMPShots", CSSTAT_PRIORITY_LOW, },
  190. { CSSTAT_SHOTS_MAC10, "total_shots_mac10", "#GAMEUI_Stat_MAC10Shots", CSSTAT_PRIORITY_LOW, },
  191. { CSSTAT_SHOTS_UMP45, "total_shots_ump45", "#GAMEUI_Stat_UMP45Shots", CSSTAT_PRIORITY_LOW, },
  192. { CSSTAT_SHOTS_M3, "total_shots_m3", "#GAMEUI_Stat_M3Shots", CSSTAT_PRIORITY_LOW, },
  193. { CSSTAT_SHOTS_XM1014, "total_shots_xm1014", "#GAMEUI_Stat_XM1014Shots", CSSTAT_PRIORITY_LOW, },
  194. { CSSTAT_SHOTS_M249, "total_shots_m249", "#GAMEUI_Stat_M249Shots", CSSTAT_PRIORITY_LOW, },
  195. { CSSTAT_SHOTS_BIZON, "total_shots_bizon", "#GAMEUI_Stat_BIZONShots", CSSTAT_PRIORITY_LOW, },
  196. { CSSTAT_SHOTS_MAG7, "total_shots_mag7", "#GAMEUI_Stat_MAG7Shots", CSSTAT_PRIORITY_LOW, },
  197. { CSSTAT_SHOTS_NEGEV, "total_shots_negev", "#GAMEUI_Stat_NEGEVShots", CSSTAT_PRIORITY_LOW, },
  198. { CSSTAT_SHOTS_SAWEDOFF, "total_shots_sawedoff", "#GAMEUI_Stat_SAWEDOFFShots", CSSTAT_PRIORITY_LOW, },
  199. { CSSTAT_SHOTS_TEC9, "total_shots_tec9", "#GAMEUI_Stat_TEC9Shots", CSSTAT_PRIORITY_LOW, },
  200. { CSSTAT_SHOTS_TASER, "total_shots_taser", "#GAMEUI_Stat_TASERShots", CSSTAT_PRIORITY_LOW, },
  201. { CSSTAT_SHOTS_HKP2000, "total_shots_hkp2000", "#GAMEUI_Stat_HKP2000Shots", CSSTAT_PRIORITY_LOW, },
  202. { CSSTAT_SHOTS_MP7, "total_shots_mp7", "#GAMEUI_Stat_MP7Shots", CSSTAT_PRIORITY_LOW, },
  203. { CSSTAT_SHOTS_MP9, "total_shots_mp9", "#GAMEUI_Stat_MP9Shots", CSSTAT_PRIORITY_LOW, },
  204. { CSSTAT_SHOTS_NOVA, "total_shots_nova", "#GAMEUI_Stat_NovaShots", CSSTAT_PRIORITY_LOW, },
  205. { CSSTAT_SHOTS_P250, "total_shots_p250", "#GAMEUI_Stat_P250Shots", CSSTAT_PRIORITY_LOW, },
  206. { CSSTAT_SHOTS_SCAR17, "total_shots_scar17", "#GAMEUI_Stat_SCAR17Shots", CSSTAT_PRIORITY_LOW, },
  207. { CSSTAT_SHOTS_SCAR20, "total_shots_scar20", "#GAMEUI_Stat_SCAR20Shots", CSSTAT_PRIORITY_LOW, },
  208. { CSSTAT_SHOTS_SG556, "total_shots_sg556", "#GAMEUI_Stat_SG556Shots", CSSTAT_PRIORITY_LOW, },
  209. { CSSTAT_SHOTS_SSG08, "total_shots_ssg08", "#GAMEUI_Stat_SSG08Shots", CSSTAT_PRIORITY_LOW, },
  210. { CSSTAT_HITS_DEAGLE, "total_hits_deagle", "#GAMEUI_Stat_DeagleHits", CSSTAT_PRIORITY_LOW, },
  211. { CSSTAT_HITS_USP, "total_hits_usp", "#GAMEUI_Stat_USPHits", CSSTAT_PRIORITY_LOW, },
  212. { CSSTAT_HITS_GLOCK, "total_hits_glock", "#GAMEUI_Stat_GlockHits", CSSTAT_PRIORITY_LOW, },
  213. { CSSTAT_HITS_P228, "total_hits_p228", "#GAMEUI_Stat_P228Hits", CSSTAT_PRIORITY_LOW, },
  214. { CSSTAT_HITS_ELITE, "total_hits_elite", "#GAMEUI_Stat_EliteHits", CSSTAT_PRIORITY_LOW, },
  215. { CSSTAT_HITS_FIVESEVEN, "total_hits_fiveseven", "#GAMEUI_Stat_FiveSevenHits", CSSTAT_PRIORITY_LOW, },
  216. { CSSTAT_HITS_AWP, "total_hits_awp", "#GAMEUI_Stat_AWPHits", CSSTAT_PRIORITY_LOW, },
  217. { CSSTAT_HITS_AK47, "total_hits_ak47", "#GAMEUI_Stat_AK47Hits", CSSTAT_PRIORITY_LOW, },
  218. { CSSTAT_HITS_M4A1, "total_hits_m4a1", "#GAMEUI_Stat_M4A1Hits", CSSTAT_PRIORITY_LOW, },
  219. { CSSTAT_HITS_AUG, "total_hits_aug", "#GAMEUI_Stat_AUGHits", CSSTAT_PRIORITY_LOW, },
  220. { CSSTAT_HITS_SG552, "total_hits_sg552", "#GAMEUI_Stat_SG552Hits", CSSTAT_PRIORITY_LOW, },
  221. { CSSTAT_HITS_SG550, "total_hits_sg550", "#GAMEUI_Stat_SG550Hits", CSSTAT_PRIORITY_LOW, },
  222. { CSSTAT_HITS_GALIL, "total_hits_galil", "#GAMEUI_Stat_GALILHits", CSSTAT_PRIORITY_LOW, },
  223. { CSSTAT_HITS_GALILAR, "total_hits_galilar", "#GAMEUI_Stat_GALILARHits", CSSTAT_PRIORITY_LOW, },
  224. { CSSTAT_HITS_FAMAS, "total_hits_famas", "#GAMEUI_Stat_FAMASHits", CSSTAT_PRIORITY_LOW, },
  225. { CSSTAT_HITS_SCOUT, "total_hits_scout", "#GAMEUI_Stat_ScoutHits", CSSTAT_PRIORITY_LOW, },
  226. { CSSTAT_HITS_G3SG1, "total_hits_g3sg1", "#GAMEUI_Stat_G3SG1Hits", CSSTAT_PRIORITY_LOW, },
  227. { CSSTAT_HITS_P90, "total_hits_p90", "#GAMEUI_Stat_P90Hits", CSSTAT_PRIORITY_LOW, },
  228. { CSSTAT_HITS_MP5NAVY, "total_hits_mp5navy", "#GAMEUI_Stat_MP5NavyHits", CSSTAT_PRIORITY_LOW, },
  229. { CSSTAT_HITS_TMP, "total_hits_tmp", "#GAMEUI_Stat_TMPHits", CSSTAT_PRIORITY_LOW, },
  230. { CSSTAT_HITS_MAC10, "total_hits_mac10", "#GAMEUI_Stat_MAC10Hits", CSSTAT_PRIORITY_LOW, },
  231. { CSSTAT_HITS_UMP45, "total_hits_ump45", "#GAMEUI_Stat_UMP45Hits", CSSTAT_PRIORITY_LOW, },
  232. { CSSTAT_HITS_M3, "total_hits_m3", "#GAMEUI_Stat_M3Hits", CSSTAT_PRIORITY_LOW, },
  233. { CSSTAT_HITS_XM1014, "total_hits_xm1014", "#GAMEUI_Stat_XM1014Hits", CSSTAT_PRIORITY_LOW, },
  234. { CSSTAT_HITS_M249, "total_hits_m249", "#GAMEUI_Stat_M249Hits", CSSTAT_PRIORITY_LOW, },
  235. { CSSTAT_HITS_BIZON, "total_hits_bizon", "#GAMEUI_Stat_BIZONHits", CSSTAT_PRIORITY_LOW, },
  236. { CSSTAT_HITS_MAG7, "total_hits_mag7", "#GAMEUI_Stat_MAG7Hits", CSSTAT_PRIORITY_LOW, },
  237. { CSSTAT_HITS_NEGEV, "total_hits_negev", "#GAMEUI_Stat_NEGEVHits", CSSTAT_PRIORITY_LOW, },
  238. { CSSTAT_HITS_SAWEDOFF, "total_hits_sawedoff", "#GAMEUI_Stat_SAWEDOFFHits", CSSTAT_PRIORITY_LOW, },
  239. { CSSTAT_HITS_TEC9, "total_hits_tec9", "#GAMEUI_Stat_TEC9Hits", CSSTAT_PRIORITY_LOW, },
  240. { CSSTAT_HITS_TASER, "total_hits_taser", "#GAMEUI_Stat_TASERHits", CSSTAT_PRIORITY_LOW, },
  241. { CSSTAT_HITS_HKP2000, "total_hits_hkp2000", "#GAMEUI_Stat_HKP2000Hits", CSSTAT_PRIORITY_LOW, },
  242. { CSSTAT_HITS_MP7, "total_hits_mp7", "#GAMEUI_Stat_MP7Hits", CSSTAT_PRIORITY_LOW, },
  243. { CSSTAT_HITS_MP9, "total_hits_mp9", "#GAMEUI_Stat_MP9Hits", CSSTAT_PRIORITY_LOW, },
  244. { CSSTAT_HITS_NOVA, "total_hits_nova", "#GAMEUI_Stat_NovaHits", CSSTAT_PRIORITY_LOW, },
  245. { CSSTAT_HITS_P250, "total_hits_p250", "#GAMEUI_Stat_P250Hits", CSSTAT_PRIORITY_LOW, },
  246. { CSSTAT_HITS_SCAR17, "total_hits_scar17", "#GAMEUI_Stat_SCAR17Hits", CSSTAT_PRIORITY_LOW, },
  247. { CSSTAT_HITS_SCAR20, "total_hits_scar20", "#GAMEUI_Stat_SCAR20Hits", CSSTAT_PRIORITY_LOW, },
  248. { CSSTAT_HITS_SG556, "total_hits_sg556", "#GAMEUI_Stat_SG556Hits", CSSTAT_PRIORITY_LOW, },
  249. { CSSTAT_HITS_SSG08, "total_hits_ssg08", "#GAMEUI_Stat_SSG08Hits", CSSTAT_PRIORITY_LOW, },
  250. { CSSTAT_DAMAGE_DEAGLE, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  251. { CSSTAT_DAMAGE_USP, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  252. { CSSTAT_DAMAGE_GLOCK, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  253. { CSSTAT_DAMAGE_P228, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  254. { CSSTAT_DAMAGE_ELITE, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  255. { CSSTAT_DAMAGE_FIVESEVEN, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  256. { CSSTAT_DAMAGE_AWP, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  257. { CSSTAT_DAMAGE_AK47, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  258. { CSSTAT_DAMAGE_M4A1, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  259. { CSSTAT_DAMAGE_AUG, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  260. { CSSTAT_DAMAGE_SG552, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  261. { CSSTAT_DAMAGE_SG550, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  262. { CSSTAT_DAMAGE_GALIL, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  263. { CSSTAT_DAMAGE_GALILAR, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  264. { CSSTAT_DAMAGE_FAMAS, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  265. { CSSTAT_DAMAGE_SCOUT, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  266. { CSSTAT_DAMAGE_G3SG1, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  267. { CSSTAT_DAMAGE_P90, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  268. { CSSTAT_DAMAGE_MP5NAVY, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  269. { CSSTAT_DAMAGE_TMP, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  270. { CSSTAT_DAMAGE_MAC10, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  271. { CSSTAT_DAMAGE_UMP45, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  272. { CSSTAT_DAMAGE_M3, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  273. { CSSTAT_DAMAGE_XM1014, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  274. { CSSTAT_DAMAGE_M249, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  275. { CSSTAT_DAMAGE_BIZON, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  276. { CSSTAT_DAMAGE_MAG7, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  277. { CSSTAT_DAMAGE_NEGEV, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  278. { CSSTAT_DAMAGE_SAWEDOFF, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  279. { CSSTAT_DAMAGE_TEC9, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  280. { CSSTAT_DAMAGE_TASER, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  281. { CSSTAT_DAMAGE_HKP2000, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  282. { CSSTAT_DAMAGE_MP7, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  283. { CSSTAT_DAMAGE_MP9, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  284. { CSSTAT_DAMAGE_NOVA, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  285. { CSSTAT_DAMAGE_P250, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  286. { CSSTAT_DAMAGE_SCAR17, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  287. { CSSTAT_DAMAGE_SCAR20, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  288. { CSSTAT_DAMAGE_SG556, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  289. { CSSTAT_DAMAGE_SSG08, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  290. { CSSTAT_KILLS_HEADSHOT, "total_kills_headshot", "#GAMEUI_Stat_HeadshotKills", CSSTAT_PRIORITY_HIGH, },
  291. { CSSTAT_KILLS_ENEMY_BLINDED, "total_kills_enemy_blinded", "#GAMEUI_Stat_BlindedEnemyKills", CSSTAT_PRIORITY_HIGH, },
  292. { CSSTAT_KILLS_WHILE_BLINDED, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  293. { CSSTAT_KILLS_WITH_LAST_ROUND, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  294. { CSSTAT_KILLS_ENEMY_WEAPON, "total_kills_enemy_weapon", "#GAMEUI_Stat_EnemyWeaponKills", CSSTAT_PRIORITY_HIGH, },
  295. { CSSTAT_KILLS_KNIFE_FIGHT, "total_kills_knife_fight", "#GAMEUI_Stat_KnifeFightKills", CSSTAT_PRIORITY_HIGH, },
  296. { CSSTAT_KILLS_WHILE_DEFENDING_BOMB, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  297. { CSSTAT_KILLS_WITH_STATTRAK_WEAPON, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  298. { CSSTAT_DECAL_SPRAYS, "total_decal_sprays", "#GAMEUI_Stat_DecalSprays", CSSTAT_PRIORITY_HIGH, },
  299. { CSSTAT_TOTAL_JUMPS, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  300. { CSSTAT_KILLS_WHILE_LAST_PLAYER_ALIVE, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  301. { CSSTAT_KILLS_ENEMY_WOUNDED, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  302. { CSSTAT_FALL_DAMAGE, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  303. { CSSTAT_NUM_HOSTAGES_RESCUED, "total_rescued_hostages", "#GAMEUI_Stat_NumRescuedHostages", CSSTAT_PRIORITY_LOW, },
  304. { CSSTAT_NUM_BROKEN_WINDOWS, "total_broken_windows", "#GAMEUI_Stat_NumBrokenWindows", CSSTAT_PRIORITY_LOW, },
  305. { CSSTAT_PROPSBROKEN_ALL, NULL, NULL, CSSTAT_PRIORITY_LOW, },
  306. { CSSTAT_PROPSBROKEN_MELON, NULL, NULL, CSSTAT_PRIORITY_LOW, },
  307. { CSSTAT_PROPSBROKEN_OFFICEELECTRONICS, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  308. { CSSTAT_PROPSBROKEN_OFFICERADIO, NULL, NULL, CSSTAT_PRIORITY_LOW, },
  309. { CSSTAT_PROPSBROKEN_OFFICEJUNK, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  310. { CSSTAT_PROPSBROKEN_ITALY_MELON, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  311. { CSSTAT_KILLS_AGAINST_ZOOMED_SNIPER, "total_kills_against_zoomed_sniper","#GAMEUI_Stat_ZoomedSniperKills", CSSTAT_PRIORITY_HIGH, },
  312. { CSSTAT_WEAPONS_DONATED, "total_weapons_donated", "#GAMEUI_Stat_WeaponsDonated", CSSTAT_PRIORITY_HIGH, },
  313. { CSSTAT_ITEMS_PURCHASED, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  314. { CSSTAT_MONEY_SPENT, NULL, NULL, CSSTAT_PRIORITY_LOW, },
  315. { CSSTAT_DOMINATIONS, "total_dominations", "#GAMEUI_Stat_Dominations", CSSTAT_PRIORITY_HIGH, },
  316. { CSSTAT_DOMINATION_OVERKILLS, "total_domination_overkills", "#GAMEUI_Stat_DominationOverkills", CSSTAT_PRIORITY_HIGH, },
  317. { CSSTAT_REVENGES, "total_revenges", "#GAMEUI_Stat_Revenges", CSSTAT_PRIORITY_HIGH, },
  318. { CSSTAT_MVPS, "total_mvps", "#GAMEUI_Stat_MVPs", CSSTAT_PRIORITY_HIGH, },
  319. { CSSTAT_CONTRIBUTION_SCORE, "total_contribution_score", "#GAMEUI_Contribution_Score", CSSTAT_PRIORITY_HIGH, },
  320. { CSSTAT_GG_PROGRESSIVE_CONTRIBUTION_SCORE,"total_gun_game_contribution_score", "#GAMEUI_GG_Contribution_Score", CSSTAT_PRIORITY_HIGH, },
  321. { CSSTAT_GRENADE_DAMAGE, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  322. { CSSTAT_GRENADE_POSTHUMOUSKILLS, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  323. { CSSTAT_GRENADES_THROWN, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  324. { CSTAT_ITEMS_DROPPED_VALUE, NULL, NULL, CSSTAT_PRIORITY_NEVER, },
  325. { CSSTAT_MAP_WINS_CS_ASSAULT, "total_wins_map_cs_assault", "#GAMEUI_Stat_WinsMapCSAssault", CSSTAT_PRIORITY_ENDROUND, },
  326. { CSSTAT_MAP_WINS_CS_MILITIA, "total_wins_map_cs_militia", "#GAMEUI_Stat_WinsMapCSMilitia", CSSTAT_PRIORITY_ENDROUND, },
  327. { CSSTAT_MAP_WINS_CS_ITALY, "total_wins_map_cs_italy", "#GAMEUI_Stat_WinsMapCSItaly", CSSTAT_PRIORITY_ENDROUND, },
  328. { CSSTAT_MAP_WINS_CS_OFFICE, "total_wins_map_cs_office", "#GAMEUI_Stat_WinsMapCSOffice", CSSTAT_PRIORITY_ENDROUND, },
  329. { CSSTAT_MAP_WINS_DE_AZTEC, "total_wins_map_de_aztec", "#GAMEUI_Stat_WinsMapDEAztec", CSSTAT_PRIORITY_ENDROUND, },
  330. { CSSTAT_MAP_WINS_DE_CBBLE, "total_wins_map_de_cbble", "#GAMEUI_Stat_WinsMapDECbble", CSSTAT_PRIORITY_ENDROUND, },
  331. { CSSTAT_MAP_WINS_DE_DUST2, "total_wins_map_de_dust2", "#GAMEUI_Stat_WinsMapDEDust2", CSSTAT_PRIORITY_ENDROUND, },
  332. { CSSTAT_MAP_WINS_DE_DUST, "total_wins_map_de_dust", "#GAMEUI_Stat_WinsMapDEDust", CSSTAT_PRIORITY_ENDROUND, },
  333. { CSSTAT_MAP_WINS_DE_INFERNO, "total_wins_map_de_inferno", "#GAMEUI_Stat_WinsMapDEInferno", CSSTAT_PRIORITY_ENDROUND, },
  334. { CSSTAT_MAP_WINS_DE_NUKE, "total_wins_map_de_nuke", "#GAMEUI_Stat_WinsMapDENuke", CSSTAT_PRIORITY_ENDROUND, },
  335. { CSSTAT_MAP_WINS_DE_PIRANESI, "total_wins_map_de_piranesi", "#GAMEUI_Stat_WinsMapDEPiranesi", CSSTAT_PRIORITY_ENDROUND, },
  336. { CSSTAT_MAP_WINS_DE_PRODIGY, "total_wins_map_de_prodigy", "#GAMEUI_Stat_WinsMapDEProdigy", CSSTAT_PRIORITY_ENDROUND, },
  337. { CSSTAT_MAP_WINS_DE_LAKE, "total_wins_map_de_lake", "#GAMEUI_Stat_WinsMapDELake", CSSTAT_PRIORITY_ENDROUND, },
  338. { CSSTAT_MAP_WINS_DE_SAFEHOUSE, "total_wins_map_de_safehouse", "#GAMEUI_Stat_WinsMapDESafeHouse", CSSTAT_PRIORITY_ENDROUND, },
  339. { CSSTAT_MAP_WINS_DE_SHORTTRAIN, "total_wins_map_de_shorttrain", "#GAMEUI_Stat_WinsMapShorttrain", CSSTAT_PRIORITY_ENDROUND, },
  340. { CSSTAT_MAP_WINS_DE_TRAIN, "total_wins_map_de_train", "#GAMEUI_Stat_WinsMapTrain", CSSTAT_PRIORITY_ENDROUND, },
  341. { CSSTAT_MAP_WINS_DE_SUGARCANE, "total_wins_map_de_sugarcane", "#GAMEUI_Stat_WinsMapDESugarcane", CSSTAT_PRIORITY_ENDROUND, },
  342. { CSSTAT_MAP_WINS_DE_STMARC, "total_wins_map_de_stmarc", "#GAMEUI_Stat_WinsMapDEStMarc", CSSTAT_PRIORITY_ENDROUND, },
  343. { CSSTAT_MAP_WINS_DE_BANK, "total_wins_map_de_bank", "#GAMEUI_Stat_WinsMapDEBank", CSSTAT_PRIORITY_ENDROUND, },
  344. { CSSTAT_MAP_WINS_DE_EMBASSY, "total_wins_map_de_embassy", "#GAMEUI_Stat_WinsMapDEEmbassy", CSSTAT_PRIORITY_ENDROUND, },
  345. { CSSTAT_MAP_WINS_DE_DEPOT, "total_wins_map_de_depot", "#GAMEUI_Stat_WinsMapDEDepot", CSSTAT_PRIORITY_ENDROUND, },
  346. { CSSTAT_MAP_WINS_DE_VERTIGO, "total_wins_map_de_vertigo", "#GAMEUI_Stat_WinsMapDEVertigo", CSSTAT_PRIORITY_ENDROUND, },
  347. { CSSTAT_MAP_WINS_DE_BALKAN, "total_wins_map_de_balkan", "#GAMEUI_Stat_WinsMapDEBalkan", CSSTAT_PRIORITY_ENDROUND, },
  348. { CSSTAT_MAP_WINS_AR_MONASTERY, "total_wins_map_ar_monastery", "#GAMEUI_Stat_WinsMapARMonastery", CSSTAT_PRIORITY_ENDROUND, },
  349. { CSSTAT_MAP_WINS_AR_SHOOTS, "total_wins_map_ar_shoots", "#GAMEUI_Stat_WinsMapARShoots", CSSTAT_PRIORITY_ENDROUND, },
  350. { CSSTAT_MAP_WINS_AR_BAGGAGE, "total_wins_map_ar_baggage", "#GAMEUI_Stat_WinsMapARBaggage", CSSTAT_PRIORITY_ENDROUND, },
  351. { CSSTAT_MAP_ROUNDS_CS_MILITIA, "total_rounds_map_cs_militia", "#GAMEUI_Stat_RoundsMapCSMilitia", CSSTAT_PRIORITY_ENDROUND, },
  352. { CSSTAT_MAP_ROUNDS_CS_ASSAULT, "total_rounds_map_cs_assault", "#GAMEUI_Stat_RoundsMapCSAssault", CSSTAT_PRIORITY_ENDROUND, },
  353. { CSSTAT_MAP_ROUNDS_CS_ITALY, "total_rounds_map_cs_italy", "#GAMEUI_Stat_RoundsMapCSItaly", CSSTAT_PRIORITY_ENDROUND, },
  354. { CSSTAT_MAP_ROUNDS_CS_OFFICE, "total_rounds_map_cs_office", "#GAMEUI_Stat_RoundsMapCSOffice", CSSTAT_PRIORITY_ENDROUND, },
  355. { CSSTAT_MAP_ROUNDS_DE_AZTEC, "total_rounds_map_de_aztec", "#GAMEUI_Stat_RoundsMapDEAztec", CSSTAT_PRIORITY_ENDROUND, },
  356. { CSSTAT_MAP_ROUNDS_DE_CBBLE, "total_rounds_map_de_cbble", "#GAMEUI_Stat_RoundsMapDECbble", CSSTAT_PRIORITY_ENDROUND, },
  357. { CSSTAT_MAP_ROUNDS_DE_DUST2, "total_rounds_map_de_dust2", "#GAMEUI_Stat_RoundsMapDEDust2", CSSTAT_PRIORITY_ENDROUND, },
  358. { CSSTAT_MAP_ROUNDS_DE_DUST, "total_rounds_map_de_dust", "#GAMEUI_Stat_RoundsMapDEDust", CSSTAT_PRIORITY_ENDROUND, },
  359. { CSSTAT_MAP_ROUNDS_DE_INFERNO, "total_rounds_map_de_inferno", "#GAMEUI_Stat_RoundsMapDEInferno", CSSTAT_PRIORITY_ENDROUND, },
  360. { CSSTAT_MAP_ROUNDS_DE_NUKE, "total_rounds_map_de_nuke", "#GAMEUI_Stat_RoundsMapDENuke", CSSTAT_PRIORITY_ENDROUND, },
  361. { CSSTAT_MAP_ROUNDS_DE_PIRANESI, "total_rounds_map_de_piranesi", "#GAMEUI_Stat_RoundsMapDEPiranesi", CSSTAT_PRIORITY_ENDROUND, },
  362. { CSSTAT_MAP_ROUNDS_DE_PRODIGY, "total_rounds_map_de_prodigy", "#GAMEUI_Stat_RoundsMapDEProdigy", CSSTAT_PRIORITY_ENDROUND, },
  363. { CSSTAT_MAP_ROUNDS_DE_LAKE, "total_rounds_map_de_lake", "#GAMEUI_Stat_RoundsMapDELake", CSSTAT_PRIORITY_ENDROUND, },
  364. { CSSTAT_MAP_ROUNDS_DE_SAFEHOUSE, "total_rounds_map_de_safehouse", "#GAMEUI_Stat_RoundsMapDESafeHouse", CSSTAT_PRIORITY_ENDROUND, },
  365. { CSSTAT_MAP_ROUNDS_DE_SHORTTRAIN, "total_rounds_map_de_shorttrain", "#GAMEUI_Stat_RoundsMapShorttrain", CSSTAT_PRIORITY_ENDROUND, },
  366. { CSSTAT_MAP_ROUNDS_DE_TRAIN, "total_rounds_map_de_train", "#GAMEUI_Stat_RoundsMapTrain", CSSTAT_PRIORITY_ENDROUND, },
  367. { CSSTAT_MAP_ROUNDS_DE_SUGARCANE, "total_rounds_map_de_sugarcane", "#GAMEUI_Stat_RoundsMapDESugarcane", CSSTAT_PRIORITY_ENDROUND, },
  368. { CSSTAT_MAP_ROUNDS_DE_STMARC, "total_rounds_map_de_stmarc", "#GAMEUI_Stat_RoundsMapDEStMarc", CSSTAT_PRIORITY_ENDROUND, },
  369. { CSSTAT_MAP_ROUNDS_DE_BANK, "total_rounds_map_de_bank", "#GAMEUI_Stat_RoundsMapDEBank", CSSTAT_PRIORITY_ENDROUND, },
  370. { CSSTAT_MAP_ROUNDS_DE_EMBASSY, "total_rounds_map_de_embassy", "#GAMEUI_Stat_RoundsMapDEEmbassy", CSSTAT_PRIORITY_ENDROUND, },
  371. { CSSTAT_MAP_ROUNDS_DE_DEPOT, "total_rounds_map_de_depot", "#GAMEUI_Stat_RoundsMapDEDepot", CSSTAT_PRIORITY_ENDROUND, },
  372. { CSSTAT_MAP_ROUNDS_DE_VERTIGO, "total_rounds_map_de_vertigo", "#GAMEUI_Stat_RoundsMapDEVertigo", CSSTAT_PRIORITY_ENDROUND, },
  373. { CSSTAT_MAP_ROUNDS_DE_BALKAN, "total_rounds_map_de_balkan", "#GAMEUI_Stat_RoundsMapDEBalkan", CSSTAT_PRIORITY_ENDROUND, },
  374. { CSSTAT_MAP_ROUNDS_AR_MONASTERY, "total_rounds_map_ar_monastery", "#GAMEUI_Stat_RoundsMapARMonastery", CSSTAT_PRIORITY_ENDROUND, },
  375. { CSSTAT_MAP_ROUNDS_AR_SHOOTS, "total_rounds_map_ar_shoots", "#GAMEUI_Stat_RoundsMapARShoots", CSSTAT_PRIORITY_ENDROUND, },
  376. { CSSTAT_MAP_ROUNDS_AR_BAGGAGE, "total_rounds_map_ar_baggage", "#GAMEUI_Stat_RoundsMapAR_Baggage", CSSTAT_PRIORITY_ENDROUND, },
  377. // match stats
  378. { CSSTAT_MAP_MATCHES_WON_SHOOTS, "total_matches_won_shoots", "#GAMEUI_Stat_MatchWinsShoots", CSSTAT_PRIORITY_ENDROUND, },
  379. { CSSTAT_MAP_MATCHES_WON_BAGGAGE, "total_matches_won_baggage", "#GAMEUI_Stat_MatchWinsBaggage", CSSTAT_PRIORITY_ENDROUND, },
  380. { CSSTAT_MAP_MATCHES_WON_LAKE, "total_matches_won_lake", "#GAMEUI_Stat_MatchWinsLake", CSSTAT_PRIORITY_ENDROUND, },
  381. { CSSTAT_MAP_MATCHES_WON_SUGARCANE, "total_matches_won_sugarcane", "#GAMEUI_Stat_MatchWinsSugarcane", CSSTAT_PRIORITY_ENDROUND, },
  382. { CSSTAT_MAP_MATCHES_WON_STMARC, "total_matches_won_stmarc", "#GAMEUI_Stat_MatchWinsStMarc", CSSTAT_PRIORITY_ENDROUND, },
  383. { CSSTAT_MAP_MATCHES_WON_BANK, "total_matches_won_bank", "#GAMEUI_Stat_MatchWinsBank", CSSTAT_PRIORITY_ENDROUND, },
  384. { CSSTAT_MAP_MATCHES_WON_EMBASSY, "total_matches_won_embassy", "#GAMEUI_Stat_MatchWinsEmbassy", CSSTAT_PRIORITY_ENDROUND, },
  385. { CSSTAT_MAP_MATCHES_WON_DEPOT, "total_matches_won_depot", "#GAMEUI_Stat_MatchWinsDepot", CSSTAT_PRIORITY_ENDROUND, },
  386. { CSSTAT_MAP_MATCHES_WON_SAFEHOUSE, "total_matches_won_safehouse", "#GAMEUI_Stat_MatchWinsSafeHouse", CSSTAT_PRIORITY_ENDROUND, },
  387. { CSSTAT_MAP_MATCHES_WON_SHORTTRAIN, "total_matches_won_shorttrain", "#GAMEUI_Stat_MatchWinsShorttrain", CSSTAT_PRIORITY_ENDROUND, },
  388. { CSSTAT_MAP_MATCHES_WON_TRAIN, "total_matches_won_train", "#GAMEUI_Stat_MatchWinsTrain", CSSTAT_PRIORITY_ENDROUND, },
  389. { CSSTAT_MATCHES_WON, "total_matches_won", "#GAMEUI_Stat_MatchWins", CSSTAT_PRIORITY_ENDROUND, },
  390. { CSSTAT_MATCHES_DRAW, "total_matches_drawn", "#GAMEUI_Stat_MatchDraws", CSSTAT_PRIORITY_ENDROUND, },
  391. { CSSTAT_MATCHES_PLAYED, "total_matches_played", "#GAMEUI_Stat_MatchesPlayed", CSSTAT_PRIORITY_ENDROUND, },
  392. { CSSTAT_GUN_GAME_MATCHES_WON, "total_gg_matches_won", "#GAMEUI_Stat_MatchWinsGG", CSSTAT_PRIORITY_ENDROUND, },
  393. { CSSTAT_GUN_GAME_MATCHES_PLAYED, "total_gg_matches_played", "GAMEUI_Stat_MatchesPlayedGG", CSSTAT_PRIORITY_ENDROUND },
  394. { CSSTAT_GUN_GAME_PROGRESSIVE_MATCHES_WON,"total_progressive_matches_won", "#GAMEUI_Stat_MatchWinsProgressive", CSSTAT_PRIORITY_ENDROUND, },
  395. { CSSTAT_GUN_GAME_SELECT_MATCHES_WON, "total_select_matches_won", "#GAMEUI_Stat_MatchWinsSelect", CSSTAT_PRIORITY_ENDROUND, },
  396. { CSSTAT_GUN_GAME_TRBOMB_MATCHES_WON, "total_trbomb_matches_won", "#GAMEUI_Stat_MatchWinsTRBomb", CSSTAT_PRIORITY_ENDROUND, },
  397. // only client tracks these
  398. { CSSTAT_LASTMATCH_CONTRIBUTION_SCORE, "last_match_contribution_score", "#GameUI_Stat_LastMatch_Contrib_Score", CSSTAT_PRIORITY_NEVER },
  399. { CSSTAT_LASTMATCH_GG_PROGRESSIVE_CONTRIBUTION_SCORE,"last_match_gg_contribution_score","#GameUI_Stat_LastMatch_gg_Contrib_Score",CSSTAT_PRIORITY_NEVER },
  400. { CSSTAT_LASTMATCH_T_ROUNDS_WON, "last_match_t_wins", "#GameUI_Stat_LastMatch_TWins", CSSTAT_PRIORITY_NEVER },
  401. { CSSTAT_LASTMATCH_CT_ROUNDS_WON, "last_match_ct_wins", "#GameUI_Stat_LastMatch_CTWins", CSSTAT_PRIORITY_NEVER },
  402. { CSSTAT_LASTMATCH_ROUNDS_WON, "last_match_wins", "#GameUI_Stat_LastMatch_RoundsWon", CSSTAT_PRIORITY_NEVER },
  403. { CSTAT_LASTMATCH_ROUNDS_PLAYED, "last_match_rounds", "#GameUI_Stat_LastMatch_RoundsPlayed", CSSTAT_PRIORITY_NEVER },
  404. { CSSTAT_LASTMATCH_KILLS, "last_match_kills", "#GameUI_Stat_LastMatch_Kills", CSSTAT_PRIORITY_NEVER },
  405. { CSSTAT_LASTMATCH_DEATHS, "last_match_deaths", "#GameUI_Stat_LastMatch_Deaths", CSSTAT_PRIORITY_NEVER },
  406. { CSSTAT_LASTMATCH_MVPS, "last_match_mvps", "#GameUI_Stat_LastMatch_MVPS", CSSTAT_PRIORITY_NEVER },
  407. { CSSTAT_LASTMATCH_DAMAGE, "last_match_damage", "#GameUI_Stat_LastMatch_Damage", CSSTAT_PRIORITY_NEVER },
  408. { CSSTAT_LASTMATCH_MONEYSPENT, "last_match_money_spent", "#GameUI_Stat_LastMatch_MoneySpent", CSSTAT_PRIORITY_NEVER },
  409. { CSSTAT_LASTMATCH_DOMINATIONS, "last_match_dominations", "#GameUI_Stat_LastMatch_Dominations", CSSTAT_PRIORITY_NEVER },
  410. { CSSTAT_LASTMATCH_REVENGES, "last_match_revenges", "#GameUI_Stat_LastMatch_Revenges", CSSTAT_PRIORITY_NEVER },
  411. { CSSTAT_LASTMATCH_MAX_PLAYERS, "last_match_max_players", "#GameUI_Stat_LastMatch_MaxPlayers", CSSTAT_PRIORITY_NEVER },
  412. { CSSTAT_LASTMATCH_FAVWEAPON_ID, "last_match_favweapon_id", "#GameUI_Stat_LastMatch_FavWeapon", CSSTAT_PRIORITY_NEVER },
  413. { CSSTAT_LASTMATCH_FAVWEAPON_SHOTS, "last_match_favweapon_shots", "#GameUI_Stat_LastMatch_FavWeaponShots",CSSTAT_PRIORITY_NEVER },
  414. { CSSTAT_LASTMATCH_FAVWEAPON_HITS, "last_match_favweapon_hits", "#GameUI_Stat_LastMatch_FavWeaponHits", CSSTAT_PRIORITY_NEVER },
  415. { CSSTAT_LASTMATCH_FAVWEAPON_KILLS, "last_match_favweapon_kills", "#GameUI_Stat_LastMatch_FavWeaponKills",CSSTAT_PRIORITY_NEVER },
  416. { CSSTAT_UNDEFINED }, // sentinel
  417. };
  418. CSStatProperty CSStatProperty_Table[CSSTAT_MAX];
  419. class StatPropertyTableInitializer
  420. {
  421. public:
  422. StatPropertyTableInitializer()
  423. {
  424. memset( CSStatProperty_Table, 0, sizeof( CSStatProperty_Table ) );
  425. for ( int i = 0; i < ARRAYSIZE( CSStatProperty_Table_Init ); ++i )
  426. {
  427. int statId = CSStatProperty_Table_Init[ i ].statId;
  428. // The last entry in the table_init array is a sentinel. We were using that as
  429. // a statId causing a 100% buffer underflow, leading to nasty problems.
  430. if ( statId >= 0 && statId < ARRAYSIZE( CSStatProperty_Table ) )
  431. CSStatProperty_Table[ statId ] = CSStatProperty_Table_Init[ i ].statProperty;
  432. }
  433. }
  434. };
  435. static StatPropertyTableInitializer statPropertyTableInitializer;
  436. const WeaponName_StatId& GetWeaponTableEntryFromWeaponId( CSWeaponID id )
  437. {
  438. int i;
  439. //yes this for loop has no statement block. All we are doing is incrementing i to the appropriate point.
  440. for (i = 0 ; WeaponName_StatId_Table[i].weaponId != WEAPON_NONE ; ++i)
  441. {
  442. if (WeaponName_StatId_Table[i].weaponId == id )
  443. {
  444. break;
  445. }
  446. }
  447. return WeaponName_StatId_Table[i];
  448. }
  449. void StatsCollection_t::Aggregate( const StatsCollection_t& other )
  450. {
  451. for ( int i = 0; i < CSSTAT_MAX; ++i )
  452. {
  453. m_iValue[i] += other[i];
  454. }
  455. }