class CCSGOUserCmdPB
{
public:
uint32_t uHasBits;
uint64_t uCachedSize;
RepeatedPtrField_t<CCSGOInputHistoryEntryPB> inputHistoryField;
CBaseUserCmdPB* pBaseCmd;
bool bLeftHandDesired;
bool bIsPredictingBodyShotFX;
bool bIsPredictingHeadShotFX;
bool bIsPredictingKillRagdolls;
int32_t nAttack3StartHistoryIndex;
int32_t nAttack1StartHistoryIndex;
int32_t nAttack2StartHistoryIndex;
void CheckAndSetBits(std::uint32_t nBits)
{
if (!(uHasBits & nBits))
uHasBits |= nBits;
}
};
------------------------------
class CBaseUserCmdPB : public CBasePB
{
public:
RepeatedPtrField_t<CSubtickMoveStep> subtickMovesField;
std::string* strMoveCrc;
CInButtonStatePB* pInButtonState;
CMsgQAngle* pViewAngles;
std::int32_t nLegacyCommandNumber;
std::int32_t nClientTick;
float flForwardMove;
float flSideMove;
float flUpMove;
std::int32_t nImpulse;
std::int32_t nWeaponSelect;
std::int32_t nRandomSeed;
std::int32_t nMousedX;
std::int32_t nMousedY;
std::uint32_t nConsumedServerAngleChanges;
std::int32_t nCmdFlags;
std::uint32_t nPawnEntityHandle;
};
------------------------------
class CCSGOInterpolationInfoPB : public CBasePB
{
public:
float flFraction; // 0x18
};
------------------------------
enum ECSGOUserCmdBits : std::uint32_t
{
CSGOUSERCMD_BITS_BASECMD = 0x1U,
CSGOUSERCMD_BITS_LEFTHAND = 0x2U,
CSGOUSERCMD_BITS_PREDICTING_BODY_SHOT = 0x4U,
CSGOUSERCMD_BITS_PREDICTING_HEAD_SHOT = 0x8U,
CSGOUSERCMD_BITS_PREDICTING_KILL_RAGDOLLS = 0x10U,
CSGOUSERCMD_BITS_ATTACK3START = 0x20U,
CSGOUSERCMD_BITS_ATTACK1START = 0x40U,
CSGOUSERCMD_BITS_ATTACK2START = 0x80U
};