Skip to content

CCSPlayerController (server)

The server-side controller entity for a CS2 player. One CCSPlayerController exists per connected client for the lifetime of the connection; it persists across rounds. The controller owns a CCSPlayerPawn (the physical in-world representation) which may be recreated each round.

The controller / pawn split mirrors the Source 2 architecture described in the HL2SDK: a lightweight controller manages session-level state (score, team, competitive rank) while the pawn carries per-round physics and animation state. Demo parsers should track m_hPlayerPawn to find the corresponding pawn entity handle each round.

CS2 build 25218825 · Steam date 2026-09-09 · platform windows-x86_64 · cs2_schema.json

Kind: classSize: 2728 bytes (0xaa8)Alignment: 8 bytesModule: serverBinary: server.dll

Relationships

Inherits from: CBasePlayerController

Same name in another module: CCSPlayerController (client)

Used by (3) as a field type

Inheritance tree
Relationship diagram (11 edges)
classDiagram
    CEntityInstance <|-- CBaseEntity
    CBaseEntity <|-- CBasePlayerController
    CBasePlayerController <|-- CCSPlayerController
    CCSPlayerController --> CCSPlayerController_InGameMoneyServices
    CCSPlayerController --> CCSPlayerController_InventoryServices
    CCSPlayerController --> CCSPlayerController_ActionTrackingServices
    CCSPlayerController --> CCSPlayerController_DamageServices
    CCSPlayerController *-- GameTime_t
    CCSPlayerController --> CCSPlayerPawn
    CCSPlayerController --> CCSObserverPawn
    CCSPlayerController *-- IntervalTimer
Inheritance chain, direct subclasses (up to 20) and a few composition edges

Memory layout

205 fields, 92 declared here and 113 inherited. Offsets are absolute from the object base on windows-x86_64.

CEntityInstanceCBaseEntityCBasePlayerControllerCCSPlayerController

OffsetFieldTypeFromAnnotations
0x8m_iszPrivateVScriptsCUtlSymbolLargeCEntityInstance
0x10m_pEntityCEntityIdentity*CEntityInstanceCEntityIdentity pointer: the entity's identity record (name, class, handle, flags).
0x28m_CScriptComponentCScriptComponent*CEntityInstanceVScript component attached to the entity, when scripted.
0x30m_CBodyComponentCBodyComponent*CBaseEntity
0x38m_NetworkTransmitComponentCNetworkTransmitComponentCBaseEntity
0x248m_aThinkFunctionsCUtlVector< thinkfunc_t >CBaseEntity
0x260m_iCurrentThinkContextint32CBaseEntityMNotSaved
0x264m_nLastThinkTickGameTick_tCBaseEntity
0x268m_bDisabledContextThinksboolCBaseEntity
0x278m_isSteadyStateCTypedBitVec< 64 >CBaseEntityMNotSaved
0x280m_lastNetworkChangefloat32CBaseEntityMNotSaved
0x288m_thinkBASEPTRCBaseEntity
0x290m_ResponseContextsCUtlVector< ResponseContext_t >CBaseEntity
0x2a8m_iszResponseContextCUtlSymbolLargeCBaseEntity
0x2b0m_pfnTouchENTITYFUNCPTRCBaseEntity
0x2b8m_pfnUseUSEPTRCBaseEntity
0x2c0m_pfnBlockedENTITYFUNCPTRCBaseEntity
0x2c8m_pfnMoveDoneBASEPTRCBaseEntity
0x2d0m_iHealthint32CBaseEntityCurrent health points of the entity. Serialised with the 'ClampHealth' encoder so values above max are clamped.
0x2d4m_iMaxHealthint32CBaseEntityMaximum health points; used to normalise health bars in the HUD.
0x2d8m_lifeStateuint8CBaseEntityLIFE_STATE enum: 0 = Alive, 1 = Dying, 2 = Dead, 3 = Respawnable, 4 = Discardbody.
0x2dcm_flDamageAccumulatorfloat32CBaseEntity
0x2e0m_bTakesDamageboolCBaseEntity
0x2e8m_nTakeDamageFlagsTakeDamageFlags_tCBaseEntity
0x2f0m_nPlatformTypeEntityPlatformTypes_tCBaseEntity
0x2f2m_MoveCollideMoveCollide_tCBaseEntity
0x2f3m_MoveTypeMoveType_tCBaseEntity
0x2f4m_nPreviouslySetMoveTypeMoveType_tCBaseEntity
0x2f5m_nActualMoveTypeMoveType_tCBaseEntity
0x2f6m_nWaterTouchuint8CBaseEntityMNotSaved
0x2f7m_nSlimeTouchuint8CBaseEntityMNotSaved
0x2f8m_bRestoreInHierarchyboolCBaseEntity
0x300m_targetCUtlSymbolLargeCBaseEntity
0x308m_hDamageFilterCHandle< CBaseFilter >CBaseEntity
0x310m_iszDamageFilterNameCUtlSymbolLargeCBaseEntity
0x318m_flMoveDoneTimefloat32CBaseEntity
0x31cm_nSubclassIDCUtlStringTokenCBaseEntity
0x328m_flAnimTimefloat32CBaseEntityFloating-point timestamp of the most-recent animation update; used by the client for animation interpolation. MKV3TransferSaveOpsForField GetEngineTimeSaveRestoreOps
0x32cm_flSimulationTimefloat32CBaseEntityFloating-point timestamp of the most-recent physics simulation step; used by the client for position interpolation. MKV3TransferSaveOpsForField GetEngineTimeSaveRestoreOps
0x330m_flCreateTimeGameTime_tCBaseEntity
0x334m_bClientSideRagdollboolCBaseEntity
0x335m_ubInterpolationFrameuint8CBaseEntity
0x338m_vPrevVPhysicsUpdatePosVectorWSCBaseEntity
0x344m_iTeamNumuint8CBaseEntityTeam number: 0 = Unassigned, 1 = Spectator, 2 = Terrorist, 3 = Counter-Terrorist.
0x348m_iGlobalnameCUtlSymbolLargeCBaseEntityMSaveBehavior
0x350m_iSentToClientsint32CBaseEntityMNotSaved
0x358m_sUniqueHammerIDCUtlStringCBaseEntity
0x360m_spawnflagsuint32CBaseEntity
0x364m_nNextThinkTickGameTick_tCBaseEntityServer tick on which the entity's Think() function will next execute (-1 = never).
0x368m_nSimulationTickint32CBaseEntityMKV3TransferSaveOpsForField GetEngineTickSaveRestoreOps
0x370m_OnKilledCEntityIOOutputCBaseEntity
0x388m_fFlagsuint32CBaseEntityEntity flags bitmask (FL_ONGROUND = 1, FL_DUCKING = 4, FL_INWATER = 8, FL_FROZEN = 0x200, etc.).
0x38cm_vecAbsVelocityVectorCBaseEntity
0x398m_vecVelocityCNetworkVelocityVectorCBaseEntityCurrent world-space velocity vector of the entity.
0x3c8m_vecBaseVelocityVectorCBaseEntityAdditional world-space velocity contributed by moving platforms, conveyor belts, etc.
0x3d4m_nPushEnumCountint32CBaseEntityMNotSaved
0x3d8m_pCollisionCCollisionProperty*CBaseEntityMNotSaved
0x3e0m_hEffectEntityCHandle< CBaseEntity >CBaseEntity
0x3e4m_hOwnerEntityCHandle< CBaseEntity >CBaseEntityCHandle to the entity that owns or spawned this entity (e.g. the thrower of a grenade).
0x3e8m_fEffectsuint32CBaseEntityEffect flags bitmask (EF_NODRAW = 32, EF_NORECEIVESHADOW = 64, etc.).
0x3ecm_hGroundEntityCHandle< CBaseEntity >CBaseEntityCHandle to the entity this entity is standing on (INVALID_EHANDLE if airborne).
0x3f0m_nGroundBodyIndexint32CBaseEntity
0x3f4m_flFrictionfloat32CBaseEntitySurface friction multiplier (1.0 = normal; lower values make the entity slide more).
0x3f8m_flElasticityfloat32CBaseEntity
0x3fcm_flGravityScalefloat32CBaseEntityGravity scale multiplier (1.0 = normal; 0 = no gravity).
0x400m_flTimeScalefloat32CBaseEntityTime-scale multiplier applied to this entity's simulation (1.0 = real time; used by bullet time effects).
0x404m_flWaterLevelfloat32CBaseEntity
0x408m_bGravityDisabledboolCBaseEntity
0x409m_bAnimatedEveryTickboolCBaseEntityTrue when the entity's animation must be updated every server tick regardless of network interest.
0x40cm_flActualGravityScalefloat32CBaseEntity
0x410m_bGravityActuallyDisabledboolCBaseEntity
0x411m_bDisableLowViolenceboolCBaseEntity
0x412m_nWaterTypeuint8CBaseEntity
0x414m_iEFlagsint32CBaseEntity
0x418m_OnUser1CEntityIOOutputCBaseEntity
0x430m_OnUser2CEntityIOOutputCBaseEntity
0x448m_OnUser3CEntityIOOutputCBaseEntity
0x460m_OnUser4CEntityIOOutputCBaseEntity
0x478m_iInitialTeamNumint32CBaseEntity
0x47cm_flNavIgnoreUntilTimeGameTime_tCBaseEntity
0x480m_vecAngVelocityQAngleCBaseEntity
0x48cm_bNetworkQuantizeOriginAndAnglesboolCBaseEntity
0x48dm_bLagCompensateboolCBaseEntity
0x490m_pBlockerCHandle< CBaseEntity >CBaseEntity
0x494m_flLocalTimefloat32CBaseEntity
0x498m_flVPhysicsUpdateLocalTimefloat32CBaseEntity
0x49cm_nBloodTypeBloodTypeCBaseEntity
0x4a0m_pPulseGraphInstanceCPulseGraphInstance_ServerEntity*CBaseEntityMKV3TransferSaveOpsForField GetPulseInstanceSaveRestoreOps
0x4b0m_nInButtonsWhichAreTogglesuint64CBasePlayerControllerMNotSaved
0x4b8m_nTickBaseuint32CBasePlayerControllerServer tick number at the time of the most-recent usercmd from this client. MNotSaved
0x4e0m_hPawnCHandle< CBasePlayerPawn >CBasePlayerControllerCHandle to the base pawn currently controlled by this controller.
0x4e4m_bKnownTeamMismatchboolCBasePlayerController
0x4e8m_nSplitScreenSlotCSplitScreenSlotCBasePlayerControllerMNotSaved
0x4ecm_hSplitOwnerCHandle< CBasePlayerController >CBasePlayerControllerMNotSaved
0x4f0m_hSplitScreenPlayersCUtlVector< CHandle< CBasePlayerController > >CBasePlayerControllerMNotSaved
0x508m_bIsHLTVboolCBasePlayerController
0x50cm_iConnectedPlayerConnectedStateCBasePlayerControllerPlayerConnectedState enum – 0 = Disconnected, 1 = Connected, 2 = Connecting. MNotSaved
0x510m_iMostConnectedPlayerConnectedStateCBasePlayerControllerMNotSaved
0x514m_iszPlayerNamechar[128]CBasePlayerControllerDisplay name of the player, as reported by Steam (up to 128 bytes, UTF-8). MNotSaved
0x598m_szNetworkIDStringCUtlStringCBasePlayerControllerMNotSaved
0x5a0m_fLerpTimefloat32CBasePlayerControllerMNotSaved
0x5a4m_bLagCompensationboolCBasePlayerControllerMNotSaved
0x5a5m_bPredictboolCBasePlayerControllerMNotSaved
0x5acm_bIsLowViolenceboolCBasePlayerControllerMNotSaved
0x5adm_bGamePausedboolCBasePlayerControllerMNotSaved
0x6e8m_iIgnoreGlobalChatChatIgnoreType_tCBasePlayerControllerMNotSaved
0x6ecm_flLastPlayerTalkTimefloat32CBasePlayerControllerMKV3TransferSaveOpsForField GetEngineTimeSaveRestoreOps
0x6f0m_flLastEntitySteadyStatefloat32CBasePlayerControllerMNotSaved
0x6f4m_nAvailableEntitySteadyStateint32CBasePlayerControllerMNotSaved
0x6f8m_bHasAnySteadyStateEntsboolCBasePlayerControllerMNotSaved
0x708m_steamIDuint64CBasePlayerController64-bit Steam account ID (SteamID64) of the connected client. MNotSaved
0x710m_bNoClipEnabledboolCBasePlayerControllerTrue when sv_cheats noclip is active for this player.
0x714m_iDesiredFOVuint32CBasePlayerControllerField-of-view override requested by the player (0 = use server default).
0x7e0m_pInGameMoneyServicesCCSPlayerController_InGameMoneyServices*
0x7e8m_pInventoryServicesCCSPlayerController_InventoryServices*
0x7f0m_pActionTrackingServicesCCSPlayerController_ActionTrackingServices*
0x7f8m_pDamageServicesCCSPlayerController_DamageServices*
0x800m_iPinguint32Player's current network round-trip latency, in milliseconds.
0x804m_bHasCommunicationAbuseMutebool
0x808m_uiCommunicationMuteFlagsuint32
0x810m_szCrosshairCodesCUtlSymbolLargeEncoded crosshair configuration string (same format as the cl_crosshair_reticle_* convars share-code).
0x818m_iPendingTeamNumuint8Team number the player will be moved to at the next team-change opportunity.
0x81cm_flForceTeamTimeGameTime_tGameTime after which team-forcing is no longer applied.
0x820m_iCompTeammateColorint32
0x824m_bEverPlayedOnTeamboolTrue once this player has played at least one round as a non-spectator.
0x825m_bAttemptedToGetColorbool
0x828m_iTeammatePreferredColorint32
0x82cm_bTeamChangedbool
0x82dm_bInSwitchTeambool
0x82em_bHasSeenJoinGamebool
0x82fm_bJustBecameSpectatorbool
0x830m_bSwitchTeamsOnNextRoundResetbool
0x831m_bRemoveAllItemsOnNextRoundResetbool
0x834m_flLastJoinTeamTimeGameTime_t
0x838m_szClanCUtlSymbolLargePlayer's clan tag string, displayed next to the name in the scoreboard.
0x840m_iCoachingTeamint32Team number this player is coaching (0 if not coaching).
0x848m_nPlayerDominateduint6464-bit bitmask; bit N set means this player is dominating player-slot N.
0x850m_nPlayerDominatingMeuint6464-bit mask of player-slot bits that are currently dominating this player.
0x858m_iCompetitiveRankingint32Player's current Premier/Competitive numeric skill rating.
0x85cm_iCompetitiveWinsint32Total number of ranked wins accumulated on this account.
0x860m_iCompetitiveRankTypeint8Rank type identifier (e.g. 0 = unranked, 11 = Premier, 12 = Competitive).
0x864m_iCompetitiveRankingPredicted_Winint32Predicted rating delta if the match ends in a win for this player.
0x868m_iCompetitiveRankingPredicted_Lossint32Predicted rating delta if the match ends in a loss.
0x86cm_iCompetitiveRankingPredicted_Tieint32Predicted rating delta if the match ends in a tie/draw.
0x870m_nEndMatchNextMapVoteint32Index of the map this player has voted for in the end-of-match map vote.
0x874m_unActiveQuestIduint16Active operation mission ID for this player (0 if none active).
0x878m_rtActiveMissionPerioduint32
0x87cm_nQuestProgressReasonQuestProgress::ReasonReason code for the last quest-progress update sent to this player.
0x880m_unPlayerTvControlFlagsuint32
0x8b0m_iDraftIndexint32
0x8b4m_msQueuedModeDisconnectionTimestampuint32
0x8b8m_uiAbandonRecordedReasonuint32
0x8bcm_eNetworkDisconnectionReasonuint32
0x8c0m_bCannotBeKickedbool
0x8c1m_bEverFullyConnectedbool
0x8c2m_bAbandonAllowsSurrenderbool
0x8c3m_bAbandonOffersInstantSurrenderbool
0x8c4m_bDisconnection1MinWarningPrintedbool
0x8c5m_bScoreReportedbool
0x8c8m_nDisconnectionTickint32Server tick at which this player disconnected (used for reconnect grace period).
0x8d8m_bControllingBotboolTrue when this human controller has taken over a bot pawn.
0x8d9m_bHasControlledBotThisRoundboolTrue if the player took over a bot at any point this round.
0x8dam_bHasBeenControlledByPlayerThisRoundbool
0x8dcm_nBotsControlledThisRoundint32
0x8e0m_bCanControlObservedBotboolTrue when the player is allowed to take control of the bot they are spectating.
0x8e4m_hPlayerPawnCHandle< CCSPlayerPawn >CHandle pointing to the player's active CCSPlayerPawn.
0x8e8m_hObserverPawnCHandle< CCSObserverPawn >CHandle to the CCSObserverPawn when the player is spectating.
0x8ecm_DesiredObserverModeint32
0x8f0m_hDesiredObserverTargetCEntityHandle
0x8f4m_bPawnIsAliveboolTrue while the player's pawn is alive and spawned.
0x8f8m_iPawnHealthuint32Current health of the pawn, networked to teammates and spectators.
0x8fcm_iPawnArmorint32Current armor value of the pawn (0–100 for vest, 100+ for helmet).
0x900m_bPawnHasDefuserboolTrue when the pawn is carrying a defuse kit.
0x901m_bPawnHasHelmetboolTrue when the pawn has a full helmet (takes head-shot armor penalty into account).
0x902m_nPawnCharacterDefIndexuint16Item definition index of the character/agent skin equipped on the pawn.
0x904m_iPawnLifetimeStartint32Server tick on which the current pawn was spawned.
0x908m_iPawnLifetimeEndint32Server tick on which the current pawn died (0 while still alive).
0x90cm_iPawnBotDifficultyint32
0x910m_hOriginalControllerOfCurrentPawnCHandle< CCSPlayerController >When a human takes over a bot, this holds a handle back to the original bot controller so the pawn can be returned after the human disconnects.
0x914m_iScoreint32Lifetime score for this connection (frags minus team-kills, etc.).
0x918m_iRoundScoreint32
0x91cm_iRoundsWonint32
0x920m_recentKillQueueuint8[8]Circular buffer of the 8 most-recent enemy kills this round (pawn entity indices).
0x928m_nFirstKilluint8Index within m_recentKillQueue of the oldest valid entry.
0x929m_nKillCountuint8Number of valid entries currently in m_recentKillQueue.
0x92am_bMvpNoMusicboolTrue when the MVP jingle should be suppressed for this player's MVP award.
0x92cm_eMvpReasonint32Reason for the most recent MVP award (enum: 1 = most kills, 2 = bomb defuse, 3 = bomb plant, etc.).
0x930m_iMusicKitIDint32Item definition index of the music kit active for this player.
0x934m_iMusicKitMVPsint32Number of MVPs awarded while this music kit has been equipped (affects music kit stat tracking).
0x938m_iMVPsint32Number of MVP stars the player has earned in the current match.
0x93cm_nUpdateCounterint32
0x940m_flSmoothedPingfloat32
0x948m_lastHeldVoteTimerIntervalTimer
0x960m_bShowHintsbool
0x964m_iNextTimeCheckint32
0x968m_bJustDidTeamKillbool
0x969m_bPunishForTeamKillbool
0x96am_bGaveTeamDamageWarningbool
0x96bm_bGaveTeamDamageWarningThisRoundbool
0x970m_dblLastReceivedPacketPlatFloatTimefloat64
0x978m_LastTeamDamageWarningTimeGameTime_t
0x97cm_LastTimePlayerWasDisconnectedForPawnsRemoveGameTime_t
0x980m_nSuspiciousHitCountuint32
0x984m_nNonSuspiciousHitStreakuint32
0xa29m_bFireBulletsSeedSynchronizedboolTrue once the client's bullet-fire PRNG seed has been synchronised with the server.