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
3233static 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