#pragma once #include "Utils/Memory.h" #include "Utils/FNV1A.h" #include "Schema/SchemaSetup.h" #include "EntityHandle.h" #include "Utils/cVector.h" #include "Bones.h" #include #include "chrono" #include "Colors.h" class CEntityIdentity; class CBaseHandle; class CSkeletonInstance; class CGameSceneNode; class C_BaseEntity; class C_BaseModelEntity; class C_BasePlayerPawn; class C_CSPlayerPawnBase; class C_CSPlayerPawn; class CBasePlayerController; class CCSPlayerController; class CEntityInstance; class C_CSWeaponBase; class C_Inferno; class C_EnvSky; class C_SmokeGrenadeProjectile; class CCSGOInput; inline SchemaClassInfoData_t* pClassInfo; inline C_EnvSky* g_pEnvSky = nullptr; inline C_SmokeGrenadeProjectile* g_pSmokeGrenadeProjectile = nullptr; struct PlayerEntity { bool CanHit = false; struct C_CSPlayerController { std::string m_sSanitizedPlayerName; }Controller; struct C_CSPlayerPawnBase { Vector_t m_vOldOrigin{ 0, 0, 0 }; CBone BoneData; C_CSWeaponBase* CSWeaponBase = nullptr; Vector4D_t Rectangle; bool isVisible = false; int Health = 0; }Pawn; }; struct WeaponEntity { C_CSWeaponBase* CSWeaponBase = nullptr; Vector_t WorldPosition{ 0, 0, 0 }; std::string Name; bool isWeapon = false; }; struct ChickenEntity { struct CChicken { Vector_t WorldPosition{ 0, 0, 0 }; Vector4D_t Rectangle; CBone BoneData; bool isVisible = false; std::string Name; }Chicken; }; struct InfernoEntity { int UniqueInfernoID; std::chrono::steady_clock::time_point StartTime; struct InfernoDetails { C_Inferno* Base; Vector_t WorldPosition{ 0, 0, 0 }; bool isBurning = false; } Inferno; }; inline std::unordered_map ActiveInfernoEntities; inline int NextInfernoID = 0; inline std::vector ActivePlayersA, ActivePlayersB; inline std::vector* CurrentPlayerList = &ActivePlayersA, * NextPlayerList = &ActivePlayersB; inline std::unique_ptr cPlayerEntity = std::make_unique(); inline std::vector WeaponListA, WeaponListB; inline std::vector* CurrentWeaponList = &WeaponListA, * NextWeaponList = &WeaponListB; inline std::unique_ptr cWeaponEntity = std::make_unique(); inline std::vector ChickenListA, ChickenListB; inline std::vector* CurrentChickenList = &ChickenListA, * NextChickenList = &ChickenListB; inline std::unique_ptr CurrentChickenEntity = std::make_unique(); class CEntityIdentity { public: SCHEMA_ADD_OFFSET(std::uint32_t, GetIndex, 0x10); SCHEMA_ADD_FIELD(const char*, GetDesignerName, "CEntityIdentity->m_designerName"); SCHEMA_ADD_FIELD(std::uint32_t, GetFlags, "CEntityIdentity->m_flags"); bool IsValid() { return GetIndex() != INVALID_EHANDLE_INDEX; } int GetEntryIndex() { if (!IsValid()) return ENT_ENTRY_MASK; return GetIndex() & ENT_ENTRY_MASK; } int GetSerialNumber() { return GetIndex() >> NUM_SERIAL_NUM_SHIFT_BITS; } CEntityInstance* pInstance; }; class CEntityInstance { public: void GetSchemaClassInfo(SchemaClassInfoData_t** pReturn) { return M::CallVFunc(this, pReturn); } CBaseHandle GetRefEHandle() { CEntityIdentity* pIdentity = GetIdentity(); if (pIdentity == nullptr) return CBaseHandle(); return CBaseHandle(pIdentity->GetEntryIndex(), pIdentity->GetSerialNumber() - (pIdentity->GetFlags() & 1)); } SCHEMA_ADD_FIELD(CEntityIdentity*, GetIdentity, "CEntityInstance->m_pEntity"); }; class C_BaseEntity : public CEntityInstance { public: static C_BaseEntity* GetLocalPlayer(); bool IsWeapon() { static SchemaClassInfoData_t* pWeaponBaseClass = nullptr; if (pWeaponBaseClass == nullptr) I::SchemaSystem->FindTypeScopeForModule("client.dll")->FindDeclaredClass(&pWeaponBaseClass, "C_CSWeaponBase"); SchemaClassInfoData_t* pClassInfo; GetSchemaClassInfo(&pClassInfo); if (pClassInfo == nullptr) return false; return (pClassInfo->InheritsFrom(pWeaponBaseClass)); } SCHEMA_ADD_FIELD(std::uint8_t, GetTeam, "C_BaseEntity->m_iTeamNum"); SCHEMA_ADD_FIELD(CGameSceneNode*, GetGameSceneNode, "C_BaseEntity->m_pGameSceneNode"); SCHEMA_ADD_FIELD(std::int32_t, GetHealth, "C_BaseEntity->m_iHealth"); }; class C_BaseModelEntity : public C_BaseEntity { public: SCHEMA_ADD_FIELD(Vector_t, GetViewOffset, "C_BaseModelEntity->m_vecViewOffset"); }; class C_BasePlayerPawn : public C_BaseModelEntity { public: SCHEMA_ADD_FIELD(Vector_t, GetOrigin, "C_BasePlayerPawn->m_vOldOrigin"); }; class C_CSPlayerPawnBase : public C_BasePlayerPawn { public: SCHEMA_ADD_FIELD(C_CSWeaponBase*, CSWeaponBase, "C_CSPlayerPawnBase->m_pClippingWeapon"); }; struct CUtlVector { int count; int pad; QAngle_t* data; }; class C_CSPlayerPawn : public C_CSPlayerPawnBase { public: Vector_t GetEyePosition(); bool IsOtherEnemy(); bool BoneVisible(C_CSPlayerPawn* Local, C_CSPlayerPawn* Enemy, Vector_t Location); bool EyeVisible(C_CSPlayerPawn* Local, C_CSPlayerPawn* Enemy); bool TriggerHit(C_CSPlayerPawn* Local, C_CSPlayerPawn* Enemy, CCSGOInput* pInput, const CBone& BoneData); SCHEMA_ADD_FIELD(QAngle_t, GetPunchAngle, "C_CSPlayerPawn->m_aimPunchAngle"); SCHEMA_ADD_FIELD(CUtlVector, GetCachedAngle, "C_CSPlayerPawn->m_aimPunchCache"); SCHEMA_ADD_FIELD(int, GetShotsFired, "C_CSPlayerPawn->m_iShotsFired"); }; class CBasePlayerController : public C_BaseModelEntity { public: SCHEMA_ADD_FIELD(CBaseHandle, GetPawnHandle, "CBasePlayerController->m_hPawn"); SCHEMA_ADD_FIELD(bool, IsLocalPlayerController, "CBasePlayerController->m_bIsLocalPlayerController"); SCHEMA_ADD_FIELD(bool, IsPawnAlive, "CCSPlayerController->m_bPawnIsAlive"); }; class CCSPlayerController : public CBasePlayerController { public: SCHEMA_ADD_FIELD(const char*, GetPlayerName, "CCSPlayerController->m_sSanitizedPlayerName"); static CCSPlayerController* GetLocalPlayerController(); SCHEMA_ADD_FIELD(CBaseHandle, GetPlayerPawnHandle, "CCSPlayerController->m_hPlayerPawn"); }; class CBaseAnimGraph : public C_BaseModelEntity { public: }; class C_BaseFlex : public CBaseAnimGraph { public: }; class C_EconEntity : public C_BaseFlex { public: }; class C_BasePlayerWeapon : public C_EconEntity { public: }; class C_CSWeaponBase : public C_BasePlayerWeapon { public: SCHEMA_ADD_FIELD(int, m_nNextPrimaryAttackTick, "C_BasePlayerWeapon->m_nNextPrimaryAttackTick"); }; class CGameSceneNode { public: SCHEMA_ADD_FIELD(CEntityInstance*, GetOwner, "CGameSceneNode->m_pOwner"); SCHEMA_ADD_FIELD(Vector_t, GetAbsOrigin, "CGameSceneNode->m_vecAbsOrigin"); SCHEMA_ADD_FIELD(Vector_t, GetRenderOrigin, "CGameSceneNode->m_vRenderOrigin"); SCHEMA_ADD_FIELD(QAngle_t, GetAngleRotation, "CGameSceneNode->m_angRotation"); SCHEMA_ADD_FIELD(QAngle_t, GetAbsAngleRotation, "CGameSceneNode->m_angAbsRotation"); SCHEMA_ADD_FIELD(bool, IsDormant, "CGameSceneNode->m_bDormant"); SCHEMA_ADD_FIELD(Vector_t, GetOrigin, "CGameSceneNode->m_vecOrigin"); CSkeletonInstance* GetSkeletonInstance() { return M::CallVFunc(this); } }; class CSkeletonInstance : public CGameSceneNode { public: }; class C_Chicken : public C_BaseEntity { public: Vector_t GetEyePosition(); bool ChickenVisible(C_CSPlayerPawn* Local, C_Chicken* Enemy); }; class C_Inferno : public C_BaseEntity { public: SCHEMA_ADD_FIELD(bool, IsBurning, "C_Inferno->m_bFireIsBurning"); SCHEMA_ADD_FIELD(Vector_t, GetMinBounds, "C_Inferno->m_minBounds"); SCHEMA_ADD_FIELD(Vector_t, GetMaxBounds, "C_Inferno->m_maxBounds"); SCHEMA_ADD_FIELD(Vector_t, GetFirePositions, "C_Inferno->m_firePositions"); }; class cAggregateSceneObject { public: unsigned char Padding[0xE4]; float R; float G; float B; }; class C_EnvSky { public: SCHEMA_ADD_FIELD(bool, m_bStartDisabled, "C_EnvSky->m_bStartDisabled"); SCHEMA_ADD_FIELD(Color_t, m_vTintColor, "C_EnvSky->m_vTintColor"); SCHEMA_ADD_FIELD(Color_t, m_vTintColorLightingOnly, "C_EnvSky->m_vTintColorLightingOnly"); SCHEMA_ADD_FIELD(float, m_flBrightnessScale, "C_EnvSky->m_flBrightnessScale"); SCHEMA_ADD_FIELD(int, m_nFogType, "C_EnvSky->m_nFogType"); SCHEMA_ADD_FIELD(float, m_flFogMinStart, "C_EnvSky->m_flFogMinStart"); SCHEMA_ADD_FIELD(float, m_flFogMinEnd, "C_EnvSky->m_flFogMinEnd"); SCHEMA_ADD_FIELD(float, m_flFogMaxStart, "C_EnvSky->m_flFogMaxStart"); SCHEMA_ADD_FIELD(float, m_flFogMaxEnd, "C_EnvSky->m_flFogMaxEnd"); SCHEMA_ADD_FIELD(bool, m_bEnabled, "C_EnvSky->m_bEnabled"); }; class C_SmokeGrenadeProjectile { public: SCHEMA_ADD_FIELD(Vector_t, m_vSmokeColor, "C_SmokeGrenadeProjectile->m_vSmokeColor"); }; class C_HitBox { public: const char* m_name; // 0x0 const char* m_sSurfaceProperty; // 0x8 const char* m_sBoneName; // 0x10 Vector_t m_vMinBounds; // 0x18 Vector_t m_vMaxBounds; // 0x24 float m_flShapeRadius; // 0x30 uint32_t m_nBoneNameHash; // 0x34 int32_t m_nGroupId; // 0x38 uint8_t m_nShapeType; // 0x3c bool m_bTranslationOnly; // 0x3d private: uint8_t __pad003e[0x2]; // 0x3e public: uint32_t m_CRC; // 0x40 Color_t m_cRenderColor; // 0x44 uint16_t m_nHitBoxIndex; // 0x48 char pad2[0x26]; };