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.
130 lines
4.4 KiB
130 lines
4.4 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: Holds WarData |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#ifndef TFWARDATA_H |
|
#define TFWARDATA_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include "gcsdk/protobufsharedobject.h" |
|
#include "tf_gcmessages.h" |
|
#if defined (CLIENT_DLL) || defined (GAME_DLL) |
|
#include "gc_clientsystem.h" |
|
#endif |
|
|
|
#ifdef GC |
|
#include "tf_gc.h" |
|
#endif |
|
|
|
//--------------------------------------------------------------------------------- |
|
// Purpose: The shared object that contains a user's stats for a war |
|
//--------------------------------------------------------------------------------- |
|
class CWarData : public GCSDK::CProtoBufSharedObject< CSOWarData, k_EEConTypeWarData > |
|
{ |
|
public: |
|
CWarData(); |
|
#ifdef GC |
|
DECLARE_CLASS_MEMPOOL( CWarData ); |
|
CWarData( uint32 unAccountID, war_definition_index_t eWarID, war_side_t eSide ); |
|
|
|
virtual bool BYieldingAddInsertToTransaction( GCSDK::CSQLAccess & sqlAccess ); |
|
virtual bool BYieldingAddWriteToTransaction( GCSDK::CSQLAccess & sqlAccess, const CUtlVector< int > &fields ); |
|
virtual bool BYieldingAddRemoveToTransaction( GCSDK::CSQLAccess & sqlAccess ); |
|
|
|
void WriteToRecord( CSchWarData *pWarData ) const; |
|
void ReadFromRecord( const CSchWarData & warData ); |
|
#endif // GC |
|
}; |
|
|
|
|
|
#if defined( CLIENT_DLL ) || defined( GC ) |
|
//--------------------------------------------------------------------------------- |
|
// Purpose: Holds the global stats for a war |
|
// |
|
// On the GC, the global stats are tabulated at load-time from all current |
|
// SQL records and is then modified in-memory. |
|
// |
|
// On the client, the global stats are requested whenever they are queried |
|
// but we limit how often we request. |
|
//--------------------------------------------------------------------------------- |
|
class CTFWarGlobalDataHelper |
|
{ |
|
public: |
|
#ifdef CLIENT_DLL |
|
struct LeaderBoardEntries_t |
|
{ |
|
LeaderBoardEntries_t() : m_bInitialized( false ) {} |
|
|
|
bool m_bInitialized; |
|
CUtlVector< LeaderboardEntry_t* > m_vecEntries; |
|
}; |
|
#endif // CLIENT_DLL |
|
|
|
CTFWarGlobalDataHelper(); |
|
void Init(); |
|
bool BIsInitialized() const { return m_bInitialized; } |
|
|
|
void AddToSideScore( war_definition_index_t nWar, war_side_t nSide, uint32 nValue ); |
|
uint64 GetGlobalSideScore( war_definition_index_t nWar, war_side_t nSide ); |
|
|
|
CGCMsgGC_War_GlobalStatsResponse* FindOrCreateWarData( war_definition_index_t nWarDef, bool bCreateIfDoesntExist ); |
|
CGCMsgGC_War_GlobalStatsResponse_SideScore* FindOrCreateWarDataSide( war_side_t nWarSide, war_definition_index_t nWarDef, bool bCreateIfDoesntExist ); |
|
|
|
void SetGlobalStats( const CGCMsgGC_War_GlobalStatsResponse& newData ); |
|
|
|
#ifdef CLIENT_DLL |
|
const LeaderBoardEntries_t& GetGlobalLeaderboardScores() const { return downloadedLeaderboardScoresGlobal; } |
|
const LeaderBoardEntries_t& GetFriendsLeaderboardScores() const { return downloadedLeaderboardScoresFriends; } |
|
#endif // CLIENT_DLL |
|
|
|
private: |
|
|
|
#ifdef CLIENT_DLL |
|
void RequestUpdateGlobalStats(); |
|
void CheckGlobalStatsStaleness(); |
|
|
|
// Leaderboard functions |
|
void RequestLeaderboard(); |
|
void OnFindLeaderboard( LeaderboardFindResult_t *pResult, bool bIOFailure ); |
|
void DownloadLeaderboard(); |
|
void OnLeaderboardScoresDownloaded_Global( LeaderboardScoresDownloaded_t *pResult, bool bIOFailure ); |
|
void OnLeaderboardScoresDownloaded_Friends( LeaderboardScoresDownloaded_t *pResult, bool bIOFailure ); |
|
#endif // CLIENT_DLL |
|
|
|
bool m_bInitialized; |
|
|
|
typedef CUtlMap< war_definition_index_t, CGCMsgGC_War_GlobalStatsResponse > WarStatsMap_t; |
|
WarStatsMap_t m_mapWarStats; |
|
|
|
#ifdef CLIENT_DLL |
|
float m_flLastUpdateRequest; |
|
float m_flLastUpdated; |
|
LeaderboardFindResult_t m_findLeaderboardResults; |
|
|
|
CCallResult< CTFWarGlobalDataHelper, LeaderboardFindResult_t > m_findLeaderboardCallback; |
|
LeaderBoardEntries_t downloadedLeaderboardScoresGlobal; |
|
LeaderBoardEntries_t downloadedLeaderboardScoresFriends; |
|
|
|
CCallResult< CTFWarGlobalDataHelper, LeaderboardScoresDownloaded_t > downloadLeaderboardCallbackGlobal; |
|
CCallResult< CTFWarGlobalDataHelper, LeaderboardScoresDownloaded_t > downloadLeaderboardCallbackFriends; |
|
#endif // CLIENT_DLL |
|
}; |
|
|
|
CTFWarGlobalDataHelper& GetWarData(); |
|
#endif // CLIENT_DLL || GC |
|
|
|
CWarData* GetPlayerWarData( const CSteamID& steamID, war_definition_index_t warDefIndex, bool bLoadEvenIfWarInactive |
|
#ifdef GC_DLL |
|
, bool bLoadSOCacheIfNeeded |
|
#endif |
|
); |
|
#ifdef CLIENT_DLL |
|
CWarData* GetLocalPlayerWarData( war_definition_index_t warDefIndex ); |
|
#endif |
|
|
|
#endif // TFWARDATA_H
|
|
|