Skip to content

Commit 3c61a71

Browse files
committed
Fix detection of networked schema fields
1 parent bffa52c commit 3c61a71

1 file changed

Lines changed: 16 additions & 9 deletions

File tree

src/cs2_sdk/schema.cpp

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
#include "../common.h"
2323
#include "entity/cbaseentity.h"
24+
#include "entity2/entityclass.h"
2425
#include "plat.h"
2526
#include "schemasystem/schemasystem.h"
2627

@@ -31,14 +32,20 @@ using SchemaTableMap_t = std::map<uint32_t, SchemaKeyValueMap_t>;
3132

3233
static constexpr uint32_t g_ChainKey = hash_32_fnv1a_const("__m_pChainEntity");
3334

34-
static bool IsFieldNetworked(SchemaClassFieldData_t& field)
35+
static bool IsFieldNetworked(const char* cppName, SchemaClassFieldData_t& field)
3536
{
36-
for (int i = 0; i < field.m_nStaticMetadataCount; i++)
37-
{
38-
static auto networkEnabled = hash_32_fnv1a_const("MNetworkEnable");
39-
if (networkEnabled == hash_32_fnv1a_const(field.m_pStaticMetadata[i].m_pszName))
40-
return true;
41-
}
37+
if (!GameEntitySystem())
38+
return false;
39+
40+
// Just use a random class to get access to the full database, as some schema classes don't have entity representations
41+
CNetworkSerializerCodeGenDatabase* pDatabase = GameEntitySystem()->FindClassByName("CBaseEntity")->m_NetworkSerializerInfo->m_pDatabase;
42+
int index = pDatabase->m_ClassInfos.Find(cppName);
43+
44+
if (index == pDatabase->m_ClassInfos.InvalidIndex())
45+
return false;
46+
47+
if (pDatabase->m_ClassInfos[index]->FindField(field.m_pszName))
48+
return true;
4249

4350
return false;
4451
}
@@ -60,7 +67,7 @@ static void InitChainOffset(SchemaClassInfoData_t* pClassInfo, SchemaKeyValueMap
6067
std::pair<uint32_t, SchemaKey> keyValuePair;
6168
keyValuePair.first = g_ChainKey;
6269
keyValuePair.second.offset = field.m_nSingleInheritanceOffset;
63-
keyValuePair.second.networked = IsFieldNetworked(field);
70+
keyValuePair.second.networked = IsFieldNetworked(pClassInfo->m_pszName, field);
6471

6572
keyValueMap.insert(keyValuePair);
6673
return;
@@ -87,7 +94,7 @@ static void InitSchemaKeyValueMap(SchemaClassInfoData_t* pClassInfo, SchemaKeyVa
8794
std::pair<uint32_t, SchemaKey> keyValuePair;
8895
keyValuePair.first = hash_32_fnv1a_const(field.m_pszName);
8996
keyValuePair.second.offset = field.m_nSingleInheritanceOffset;
90-
keyValuePair.second.networked = IsFieldNetworked(field);
97+
keyValuePair.second.networked = IsFieldNetworked(pClassInfo->m_pszName, field);
9198

9299
keyValueMap.insert(keyValuePair);
93100
}

0 commit comments

Comments
 (0)