Skip to content

Commit 8fad52e

Browse files
committed
fix(CBaseModelEntity): SetSolidType crash
1 parent 770a1c9 commit 8fad52e

File tree

4 files changed

+21
-11
lines changed

4 files changed

+21
-11
lines changed

plugin_files/gamedata/offsets.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@
2424
"linux": 80
2525
},
2626
"CollisionRulesChanged": {
27-
"windows": 174,
28-
"linux": 173
27+
"windows": 178,
28+
"linux": 177
2929
},
3030
"CCSPlayer_ItemServices_GiveNamedItem": {
3131
"windows": 17,

src/sdk/entity/CBaseEntity.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,5 +182,11 @@ class CBaseEntity : public CEntityInstance
182182
g_Signatures->FetchSignature<CBaseEntity_EmitSoundFilter>("CBaseEntity_EmitSoundFilter")(filter, m_pEntity->m_EHandle.GetEntryIndex(), params);
183183
}
184184

185+
void CollisionRulesChanged()
186+
{
187+
static int offset = g_Offsets->GetOffset("CollisionRulesChanged");
188+
CALL_VIRTUAL(void, offset, this);
189+
}
190+
185191
CEntitySubclassVDataBase* GetVData() { return *(CEntitySubclassVDataBase**)((uint8*)(m_nSubclassID()) + 4); }
186192
};

src/sdk/entity/CBaseModelEntity.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,6 @@ class CBaseModelEntity : public CBaseEntity
3434
void SetSolidType(SolidType_t type)
3535
{
3636
this->m_Collision->m_nSolidType = type;
37+
CollisionRulesChanged();
3738
}
3839
};

src/sdk/entity/CCollisionProperty.h

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,22 @@ struct VPhysicsCollisionAttribute_t
66
{
77
DECLARE_SCHEMA_CLASS_BASE(VPhysicsCollisionAttribute_t, true)
88

9-
SCHEMA_FIELD_OFFSET(uint8, m_nCollisionGroup, 0)
10-
SCHEMA_FIELD_OFFSET(uint64_t, m_nInteractsAs, 0)
11-
SCHEMA_FIELD_OFFSET(uint64_t, m_nInteractsWith, 0)
12-
SCHEMA_FIELD_OFFSET(uint64_t, m_nInteractsExclude, 0)
9+
SCHEMA_FIELD_OFFSET(uint8, m_nCollisionGroup, 0);
10+
SCHEMA_FIELD_OFFSET(uint64_t, m_nInteractsAs, 0);
11+
SCHEMA_FIELD_OFFSET(uint64_t, m_nInteractsWith, 0);
12+
SCHEMA_FIELD_OFFSET(uint64_t, m_nInteractsExclude, 0);
1313
};
1414

15+
/*
16+
keep this always on struct, no matter what
17+
*/
1518
class CCollisionProperty
1619
{
1720
public:
18-
DECLARE_SCHEMA_CLASS_BASE(CCollisionProperty, false)
21+
DECLARE_SCHEMA_CLASS_BASE(CCollisionProperty, true)
1922

20-
SCHEMA_FIELD_OFFSET(VPhysicsCollisionAttribute_t, m_collisionAttribute, 0)
21-
SCHEMA_FIELD_OFFSET(SolidType_t, m_nSolidType, 0)
22-
SCHEMA_FIELD_OFFSET(uint8, m_usSolidFlags, 0)
23-
SCHEMA_FIELD_OFFSET(uint8, m_CollisionGroup, 0)
23+
SCHEMA_FIELD_OFFSET(VPhysicsCollisionAttribute_t, m_collisionAttribute, 0);
24+
SCHEMA_FIELD_OFFSET(SolidType_t, m_nSolidType, 0);
25+
SCHEMA_FIELD_OFFSET(uint8, m_usSolidFlags, 0);
26+
SCHEMA_FIELD_OFFSET(uint8, m_CollisionGroup, 0);
2427
};

0 commit comments

Comments
 (0)