diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/client/cstrike/cs_client_gamestats.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/client/cstrike/cs_client_gamestats.h')
| -rw-r--r-- | game/client/cstrike/cs_client_gamestats.h | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/game/client/cstrike/cs_client_gamestats.h b/game/client/cstrike/cs_client_gamestats.h new file mode 100644 index 0000000..76a2e1d --- /dev/null +++ b/game/client/cstrike/cs_client_gamestats.h @@ -0,0 +1,163 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef CS_STEAMSTATS_H +#define CS_STEAMSTATS_H +#ifdef _WIN32 +#pragma once +#endif + +#include "steam/steam_api.h" +#include "GameEventListener.h" +#include "../game/shared/cstrike/cs_gamestats_shared.h" + +struct SRoundData : public BaseStatData +{ + SRoundData( const StatsCollection_t *pRoundData ) + { + nRoundTime = (*pRoundData)[CSSTAT_PLAYTIME]; + nWasKilled = (*pRoundData)[CSSTAT_DEATHS]; + nIsMVP = (*pRoundData)[CSSTAT_MVPS]; + nMoneySpent = (*pRoundData)[CSSTAT_MONEY_SPENT]; + nStartingMoney = -1;// We'll get this data separately + nRoundEndReason = Invalid_Round_End_Reason;// We'll get this data separately + nRevenges = (*pRoundData)[CSSTAT_REVENGES]; + nDamageDealt = (*pRoundData)[CSSTAT_DAMAGE]; + + if ( (*pRoundData)[CSSTAT_T_ROUNDS_WON] ) + { + nWinningTeamID = TEAM_TERRORIST; + if ( (*pRoundData)[CSSTAT_ROUNDS_WON] ) + { + nTeamID = TEAM_TERRORIST; + } + else + { + nTeamID = TEAM_CT; + } + } + else + { + nWinningTeamID = TEAM_CT; + if ( (*pRoundData)[CSSTAT_ROUNDS_WON] ) + { + nTeamID = TEAM_CT; + } + else + { + nTeamID = TEAM_TERRORIST; + } + } + } + + uint32 nRoundTime; + int nTeamID; + int nWinningTeamID; + int nWasKilled; + int nIsMVP; + int nDamageDealt; + int nMoneySpent; + int nStartingMoney; + int nRevenges; + int nRoundEndReason; + + BEGIN_STAT_TABLE( "CSSRoundData" ) + REGISTER_STAT_NAMED( nRoundTime, "RoundTime" ) + REGISTER_STAT_NAMED( nTeamID, "TeamID" ) + REGISTER_STAT_NAMED( nWinningTeamID, "WinningTeamID" ) + REGISTER_STAT_NAMED( nWasKilled, "WasKilled" ) + REGISTER_STAT_NAMED( nIsMVP, "IsMvp" ) + REGISTER_STAT_NAMED( nDamageDealt, "DamageDealt" ) + REGISTER_STAT_NAMED( nMoneySpent, "MoneySpent" ) + REGISTER_STAT_NAMED( nStartingMoney, "StartingMoney" ) + REGISTER_STAT_NAMED( nRevenges, "Revenges" ) + REGISTER_STAT_NAMED( nRoundEndReason, "RoundEndReason" ) + END_STAT_TABLE() +}; +typedef CUtlVector< SRoundData* > VectorRoundData; + +struct PlayerStatData_t +{ + wchar_t* pStatDisplayName; // Localized display name of the stat + int iStatId; // CSStatType_t enum value of stat + int32 iStatValue; // Value of the stat +}; + +class CCSClientGameStats : public CAutoGameSystem, public CGameEventListener, public IGameStatTracker +{ +public: + CCSClientGameStats(); + virtual void PostInit(); + virtual void LevelShutdownPreEntity(); + virtual void Shutdown(); + virtual void LevelShutdownPreClearSteamAPIContext(); + + int GetStatCount(); + PlayerStatData_t GetStatByIndex(int index); + PlayerStatData_t GetStatById(int id); + + void ResetAllStats( void ); + void ResetMatchStats(); + void UploadRoundData( void ); + + const StatsCollection_t& GetLifetimeStats() { return m_lifetimeStats; } + const StatsCollection_t& GetMatchStats() { return m_matchStats; } + + RoundStatsDirectAverage_t* GetDirectCTStatsAverages() { return &m_directCTStatAverages; } + RoundStatsDirectAverage_t* GetDirectTStatsAverages() { return &m_directTStatAverages; } + RoundStatsDirectAverage_t* GetDirectPlayerStatsAverages() { return &m_directPlayerStatAverages; } + + void MsgFunc_MatchStatsUpdate( bf_read &msg ); + void MsgFunc_PlayerStatsUpdate( bf_read &msg ); + + // Steamworks Gamestats + virtual void SubmitGameStats( KeyValues *pKV ) + { + int listCount = s_StatLists->Count(); + for( int i=0; i < listCount; ++i ) + { + // Create a master key value that has stats everybody should share (map name, session ID, etc) + (*s_StatLists)[i]->SendData(pKV); + (*s_StatLists)[i]->Clear(); + } + } + + virtual StatContainerList_t* GetStatContainerList( void ) + { + return s_StatLists; + } + +protected: + void FireGameEvent( IGameEvent *event ); + + void UpdateSteamStats(); + void RetrieveSteamStats(); + void UpdateStats( const StatsCollection_t &stats ); + void CalculateMatchFavoriteWeapons(); + void UpdateLastMatchStats(); + +private: + StatsCollection_t m_lifetimeStats; + StatsCollection_t m_matchStats; + StatsCollection_t m_roundStats; + + RoundStatsDirectAverage_t m_directCTStatAverages; + RoundStatsDirectAverage_t m_directTStatAverages; + RoundStatsDirectAverage_t m_directPlayerStatAverages; + int m_matchMaxPlayerCount; + bool m_bSteamStatsDownload; + VectorRoundData m_RoundStatData; + + int m_RoundEndReason; + + // A static list of all the stat containers, one for each data structure being tracked + static StatContainerList_t * s_StatLists; +}; + +extern CCSClientGameStats g_CSClientGameStats; + +#endif //CS_STEAMSTATS_H |