Skip to content

Commit cb5bfb2

Browse files
Do not use dirty abs origin
1 parent e1e83d9 commit cb5bfb2

File tree

8 files changed

+13
-11
lines changed

8 files changed

+13
-11
lines changed

Source/CS2/Classes/Entities/C_BaseEntity.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ namespace cs2
1111
struct CEntitySubclassVDataBase;
1212
struct CGameSceneNode;
1313
struct CRenderComponent;
14+
struct Vector;
1415

1516
struct C_BaseEntity : CEntityInstance {
1617
using m_pGameSceneNode = CGameSceneNode*;
@@ -20,6 +21,7 @@ struct C_BaseEntity : CEntityInstance {
2021
using m_pSubclassVData = CEntitySubclassVDataBase*;
2122
using m_pRenderComponent = CRenderComponent*;
2223
using m_hOwnerEntity = CEntityHandle;
24+
using GetAbsOrigin = Vector*(C_BaseEntity* thisptr);
2325
};
2426

2527
}

Source/GameClient/Entities/BaseEntity.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,11 @@ class BaseEntity {
3232
return *this;
3333
}
3434

35-
[[nodiscard]] decltype(auto) absOrigin() const noexcept
35+
[[nodiscard]] Optional<cs2::Vector> absOrigin() const noexcept
3636
{
37-
return gameSceneNode().absOrigin();
37+
if (entity && hookContext.patternSearchResults().template get<GetAbsOriginFunction>())
38+
return *hookContext.patternSearchResults().template get<GetAbsOriginFunction>()(entity);
39+
return {};
3840
}
3941

4042
[[nodiscard]] decltype(auto) entityIdentity() const noexcept

Source/GameClient/Entities/PlayerPawn.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ class PlayerPawn {
9292

9393
[[nodiscard]] decltype(auto) absOrigin() const noexcept
9494
{
95-
return baseEntity().gameSceneNode().absOrigin();
95+
return baseEntity().absOrigin();
9696
}
9797

9898
[[nodiscard]] bool isControlledByLocalPlayer() const noexcept

Source/GameClient/GameSceneNode.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,6 @@ class GameSceneNode {
2121
return gameSceneNode != nullptr;
2222
}
2323

24-
[[nodiscard]] auto absOrigin() const noexcept
25-
{
26-
return hookContext->patternSearchResults().template get<OffsetToAbsOrigin>().of(gameSceneNode).toOptional();
27-
}
28-
2924
[[nodiscard]] decltype(auto) owner() const noexcept
3025
{
3126
return hookContext->template make<BaseEntity>(static_cast<cs2::C_BaseEntity*>(hookContext->patternSearchResults().template get<OffsetToGameSceneNodeOwner>().of(gameSceneNode).valueOr(nullptr)));

Source/MemoryPatterns/Linux/EntityPatternsLinux.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ struct EntityPatterns {
1313
.template addPattern<OffsetToTeamNumber, CodePattern{"? ? ? ? 02 48 8D 05 ? ? ? ? 74 ? 48"}.read()>()
1414
.template addPattern<OffsetToVData, CodePattern{"? ? ? ? 5A 59 48 85 C0 74 ? 4C"}.read()>()
1515
.template addPattern<OffsetToRenderComponent, CodePattern{"49 8B BC 24 ? ? ? ? 48 85 FF 74 ? 8B 47"}.add(4).read()>()
16-
.template addPattern<OffsetToOwnerEntity, CodePattern{"8B BF ? ? ? ? 8B 8F ? ? ? ?"}.add(8).read()>();
16+
.template addPattern<OffsetToOwnerEntity, CodePattern{"8B BF ? ? ? ? 8B 8F ? ? ? ?"}.add(8).read()>()
17+
.template addPattern<GetAbsOriginFunction, CodePattern{"4C 8B ? E8 ? ? ? ? F3 0F 10 05"}.add(4).abs()>();
1718
}
1819
};

Source/MemoryPatterns/MemoryPatterns.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ struct MemoryPatterns {
2828

2929
constexpr auto kClientPatterns = []() consteval {
3030
#define ADD_PATTERNS(patterns) addPatterns([](auto patternPool) consteval { return patterns::addClientPatterns(patternPool); })
31-
constexpr auto builder = PatternPoolBuilder<TempPatternPool<1500, 100>>{}
31+
constexpr auto builder = PatternPoolBuilder<TempPatternPool<2000, 100>>{}
3232
.ADD_PATTERNS(BaseModelEntityPatterns)
3333
.ADD_PATTERNS(C4Patterns)
3434
.ADD_PATTERNS(ClientPatterns)

Source/MemoryPatterns/PatternTypes/EntityPatternTypes.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,4 @@ STRONG_TYPE_ALIAS(OffsetToTeamNumber, EntityOffset<cs2::C_BaseEntity::m_iTeamNum
1616
STRONG_TYPE_ALIAS(OffsetToVData, EntityOffset<cs2::C_BaseEntity::m_pSubclassVData, std::int32_t>);
1717
STRONG_TYPE_ALIAS(OffsetToRenderComponent, EntityOffset<cs2::C_BaseEntity::m_pRenderComponent, std::int32_t>);
1818
STRONG_TYPE_ALIAS(OffsetToOwnerEntity, EntityOffset<cs2::C_BaseEntity::m_hOwnerEntity, std::int32_t>);
19+
STRONG_TYPE_ALIAS(GetAbsOriginFunction, cs2::C_BaseEntity::GetAbsOrigin*);

Source/MemoryPatterns/Windows/EntityPatternsWindows.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ struct EntityPatterns {
1313
.template addPattern<OffsetToTeamNumber, CodePattern{"44 0F B6 89 ? ? ? ? 41 3B"}.add(4).read()>()
1414
.template addPattern<OffsetToVData, CodePattern{"89 ? ? ? ? 48 85 C9 74 ? 48 8B 49 ? 48"}.add(1).read()>()
1515
.template addPattern<OffsetToRenderComponent, CodePattern{"8B ? ? ? ? ? 48 85 C0 74 ? 39 ? ? 7E"}.add(2).read()>()
16-
.template addPattern<OffsetToOwnerEntity, CodePattern{"8B 81 ? ? ? ? 4C 8B DA"}.add(2).read()>();
16+
.template addPattern<OffsetToOwnerEntity, CodePattern{"8B 81 ? ? ? ? 4C 8B DA"}.add(2).read()>()
17+
.template addPattern<GetAbsOriginFunction, CodePattern{"F8 ? 75 ? E8 ? ? ? ? F3"}.add(5).abs()>();
1718
}
1819
};

0 commit comments

Comments
 (0)