summaryrefslogtreecommitdiff
path: root/game/server/portal/portal_gamestats.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/server/portal/portal_gamestats.h
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/server/portal/portal_gamestats.h')
-rw-r--r--game/server/portal/portal_gamestats.h139
1 files changed, 139 insertions, 0 deletions
diff --git a/game/server/portal/portal_gamestats.h b/game/server/portal/portal_gamestats.h
new file mode 100644
index 0000000..7450900
--- /dev/null
+++ b/game/server/portal/portal_gamestats.h
@@ -0,0 +1,139 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef PORTAL_GAMESTATS_H
+#define PORTAL_GAMESTATS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "gamestats.h"
+
+#define PORTAL_GAMESTATS_VERSION 001
+
+//#define PORTAL_GAMESTATS_VERBOSE //verbose logging of extra stats, only a good idea during internal tests, centralized here for easy on/off
+
+
+
+//NEVER REMOVE A STRUCTURE OR CHANGE A CHUNKID. If you need to change how a chunk works, make a new structure with a new ID
+
+struct Portal_Gamestats_LevelStats_t //most of this is only tracked in verbose mode
+{
+ static const unsigned short CHUNKID = 1;
+
+ //substructures
+ struct PlayerDeaths_t
+ {
+ static const unsigned short CHUNKID = 1; //subchunks start over with id's
+ static const unsigned short TRIMSIZE = 200; //trim logs if more than this many entries exist for a single map
+ Vector ptPositionOfDeath;
+ int iDamageType;
+ char szAttackerClassName[32];
+ };
+
+ struct PortalPlacement_t
+ {
+ static const unsigned short CHUNKID = 2;
+ static const unsigned short TRIMSIZE = 1000; //trim logs if more than this many entries exist for a single map
+ Vector ptPlayerFiredFrom;
+ Vector ptPlacementPosition;
+ char iSuccessCode;
+ };
+
+ struct PlayerUse_t
+ {
+ static const unsigned short CHUNKID = 3;
+ static const unsigned short TRIMSIZE = 500; //trim logs if more than this many entries exist for a single map
+ Vector ptTraceStart;
+ Vector vTraceDelta;
+ char szUseEntityClassName[32];
+ };
+
+ struct StuckEvent_t
+ {
+ static const unsigned short CHUNKID = 4;
+ static const unsigned short TRIMSIZE = 100; //trim logs if more than this many entries exist for a single map
+ Vector ptPlayerPosition;
+ QAngle qPlayerAngles;
+ bool bNearPortal;
+ bool bDucking;
+ };
+
+ struct JumpEvent_t
+ {
+ static const unsigned short CHUNKID = 5;
+ static const unsigned short TRIMSIZE = 1000; //trim logs if more than this many entries exist for a single map
+ Vector ptPlayerPositionAtJumpStart;
+ Vector vPlayerVelocityAtJumpStart;
+ };
+
+ struct LeafTimes_t
+ {
+ static const unsigned short CHUNKID = 6;
+ static const unsigned short TRIMSIZE = 10000; //trim logs if more than this many entries exist for a single map
+ float fTimeSpentInVisLeaf;
+ LeafTimes_t( void ) : fTimeSpentInVisLeaf( 0.0f ) { };
+ };
+
+ //these are created/destroyed by parent CPortalGameStats to avoid create/copy/destroy confusion
+ CUtlVector<PlayerDeaths_t> *m_pDeaths;
+ CUtlVector<PortalPlacement_t> *m_pPlacements;
+ CUtlVector<PlayerUse_t> *m_pUseEvents;
+ CUtlVector<StuckEvent_t> *m_pStuckSpots;
+ CUtlVector<JumpEvent_t> *m_pJumps;
+ CUtlVector<LeafTimes_t> *m_pTimeSpentInVisLeafs;
+
+ void AppendSubChunksToBuffer( CUtlBuffer &SaveBuffer );
+ void LoadSubChunksFromBuffer( CUtlBuffer &LoadBuffer, unsigned int iChunkEndPosition );
+ void Clear( void );
+};
+
+
+class CPortal_Player;
+
+class CPortalGameStats : CBaseGameStats
+{
+ typedef CBaseGameStats BaseClass;
+
+public:
+ ~CPortalGameStats( void );
+ CPortalGameStats( void );
+
+ void Clear( void );
+
+ virtual void Event_LevelInit( void );
+ virtual void Event_MapChange( const char *szOldMapName, const char *szNewMapName );
+ virtual void Event_PlayerKilled( CBasePlayer *pPlayer, const CTakeDamageInfo &info );
+ void Event_PortalPlacement( const Vector &ptPlayerFiredFrom, const Vector &ptAttemptedPosition, char iSuccessCode );
+ void Event_PlayerJump( const Vector &ptStartPosition, const Vector &vStartVelocity );
+ void Event_PlayerUsed( const Vector &ptTraceStart, const Vector &vTraceDelta, CBaseEntity *pUsedEntity );
+ void Event_PlayerStuck( CPortal_Player *pPlayer );
+
+ virtual bool StatTrackingEnabledForMod( void ) { return true; }
+ virtual bool UserPlayedAllTheMaps( void );
+
+#ifdef _DEBUG
+ virtual bool AutoUpload_OnShutdown( void ) { return false; } //don't upload while we're debugging
+#endif
+
+ virtual void AppendCustomDataToSaveBuffer( CUtlBuffer &SaveBuffer );
+ virtual void LoadCustomDataFromBuffer( CUtlBuffer &LoadBuffer );
+
+ Portal_Gamestats_LevelStats_t *m_pCurrentMapStats;
+
+protected:
+ CUtlDict< Portal_Gamestats_LevelStats_t, unsigned short > m_CustomMapStats;
+ Portal_Gamestats_LevelStats_t *FindOrAddMapStats( const char *szMapName );
+};
+
+extern CPortalGameStats g_PortalGameStats;
+
+
+void CreateLevelStatPointers( Portal_Gamestats_LevelStats_t *pFillIn );
+void DestroyLevelStatPointers( Portal_Gamestats_LevelStats_t *pDestroyFrom );
+
+
+#endif // PORTAL_GAMESTATS_H