mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-19 06:51:56 +00:00
1
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user