datamap_t init.

* Get datamap vars from class datamap.
This commit is contained in:
Marvin D 2022-11-19 03:16:49 +01:00
parent 9c1efe20ad
commit d59d798d13
8 changed files with 111 additions and 0 deletions

42
r5dev/public/datamap.cpp Normal file
View File

@ -0,0 +1,42 @@
#include "core/stdafx.h"
#include "public/dt_common.h"
#include "public/datamap.h"
// [ PIXIE ]: Should work out of box when you pass proper datamap.
typedescription_t* DataMapHandler::FindFieldInDataMap(datamap_t* map, const string& fieldName)
{
while (map)
{
for (int i = 0; i < map->dataNumFields; i++)
{
string descFieldName = map->dataDesc[i].fieldName;
if (descFieldName.empty())
continue;
if (descFieldName.compare(fieldName) == 0)
return &map->dataDesc[i];
if (map->dataDesc[i].fieldType == 10) // FIELD_EMBEDDED
{
if (map->dataDesc[i].td)
{
typedescription_t* field = FindFieldInDataMap(map->dataDesc[i].td, fieldName);
if (field)
return field;
}
}
}
map = map->baseMap;
}
return nullptr;
}
int DataMapHandler::FindOffsetForField(datamap_t* map, const string& fieldName)
{
typedescription_t* field = FindFieldInDataMap(map, fieldName);
if (field)
return field->fieldOffset;
return 0;
}

45
r5dev/public/datamap.h Normal file
View File

@ -0,0 +1,45 @@
#pragma once
// Usually an enum, need to re-check if it's still standard.
typedef int64_t fieldtype_t;
struct datamap_t;
struct typedescription_t;
// [ PIXIE ] TODO: Verify this again, been a long time since I reversed this.
struct datamap_t
{
typedescription_t* dataDesc;
int dataNumFields;
int unk1_;
const char* dataClassName;
uint64_t packed_size;
int64_t unk2;
datamap_t* baseMap;
// Verify size.
};
// [ PIXIE ] TODO: Verify this again, been a long time since I reversed this.
struct typedescription_t
{
fieldtype_t fieldType;
const char* fieldName;
int fieldOffset;
unsigned short fieldSize;
short flags;
uint64_t unk2[5];
datamap_t* td;
// Not full size yet.
};
namespace DataMapHandler
{
int FindOffsetForField(datamap_t* map, const string& fieldName);
typedescription_t* FindFieldInDataMap(datamap_t* map, const string& fieldName);
}
#define DATAMAP_VAR(type, name, datamap, varname) \
type& name() { \
static int _##name = NetVarManager::FindOffsetForField(datamap, varname); \
return *(type*)((std::uintptr_t)this + _##name); \
}

View File

@ -92,6 +92,7 @@
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader> <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader> <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
</ClCompile> </ClCompile>
<ClCompile Include="..\public\datamap.cpp" />
<ClCompile Include="..\public\utility\binstream.cpp" /> <ClCompile Include="..\public\utility\binstream.cpp" />
<ClCompile Include="..\public\utility\memaddr.cpp" /> <ClCompile Include="..\public\utility\memaddr.cpp" />
<ClCompile Include="..\public\utility\module.cpp" /> <ClCompile Include="..\public\utility\module.cpp" />
@ -252,6 +253,7 @@
<ClInclude Include="..\public\avi\iavi.h" /> <ClInclude Include="..\public\avi\iavi.h" />
<ClInclude Include="..\public\avi\ibik.h" /> <ClInclude Include="..\public\avi\ibik.h" />
<ClInclude Include="..\public\bitmap\stb_image.h" /> <ClInclude Include="..\public\bitmap\stb_image.h" />
<ClInclude Include="..\public\datamap.h" />
<ClInclude Include="..\public\dt_common.h" /> <ClInclude Include="..\public\dt_common.h" />
<ClInclude Include="..\public\iengine.h" /> <ClInclude Include="..\public\iengine.h" />
<ClInclude Include="..\public\client_class.h" /> <ClInclude Include="..\public\client_class.h" />

View File

@ -612,6 +612,9 @@
<ClCompile Include="..\game\client\viewrender.cpp"> <ClCompile Include="..\game\client\viewrender.cpp">
<Filter>sdk\game\client</Filter> <Filter>sdk\game\client</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\public\datamap.cpp">
<Filter>sdk\public</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="..\client\cdll_engine_int.h"> <ClInclude Include="..\client\cdll_engine_int.h">
@ -1802,6 +1805,9 @@
<ClInclude Include="..\public\dt_common.h"> <ClInclude Include="..\public\dt_common.h">
<Filter>sdk\public</Filter> <Filter>sdk\public</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\public\datamap.h">
<Filter>sdk\public</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Image Include="..\shared\resource\lockedserver.png"> <Image Include="..\shared\resource\lockedserver.png">

View File

@ -214,6 +214,7 @@
<ClInclude Include="..\pluginsystem\pluginsystem.h" /> <ClInclude Include="..\pluginsystem\pluginsystem.h" />
<ClInclude Include="..\protoc\cl_rcon.pb.h" /> <ClInclude Include="..\protoc\cl_rcon.pb.h" />
<ClInclude Include="..\protoc\sv_rcon.pb.h" /> <ClInclude Include="..\protoc\sv_rcon.pb.h" />
<ClInclude Include="..\public\datamap.h" />
<ClInclude Include="..\public\dt_common.h" /> <ClInclude Include="..\public\dt_common.h" />
<ClInclude Include="..\public\iengine.h" /> <ClInclude Include="..\public\iengine.h" />
<ClInclude Include="..\public\client_class.h" /> <ClInclude Include="..\public\client_class.h" />
@ -547,6 +548,7 @@
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader> <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader> <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
</ClCompile> </ClCompile>
<ClCompile Include="..\public\datamap.cpp" />
<ClCompile Include="..\public\utility\binstream.cpp" /> <ClCompile Include="..\public\utility\binstream.cpp" />
<ClCompile Include="..\public\utility\memaddr.cpp" /> <ClCompile Include="..\public\utility\memaddr.cpp" />
<ClCompile Include="..\public\utility\module.cpp" /> <ClCompile Include="..\public\utility\module.cpp" />

View File

@ -1257,6 +1257,9 @@
<ClInclude Include="..\public\dt_common.h"> <ClInclude Include="..\public\dt_common.h">
<Filter>sdk\public</Filter> <Filter>sdk\public</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\public\datamap.h">
<Filter>sdk\public</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="..\common\opcodes.cpp"> <ClCompile Include="..\common\opcodes.cpp">
@ -1577,6 +1580,9 @@
<ClCompile Include="..\materialsystem\cmaterialsystem.cpp"> <ClCompile Include="..\materialsystem\cmaterialsystem.cpp">
<Filter>sdk\materialsystem</Filter> <Filter>sdk\materialsystem</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\public\datamap.cpp">
<Filter>sdk\public</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="..\Dedicated.def" /> <None Include="..\Dedicated.def" />

View File

@ -101,6 +101,7 @@
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader> <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader> <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
</ClCompile> </ClCompile>
<ClCompile Include="..\public\datamap.cpp" />
<ClCompile Include="..\public\utility\binstream.cpp" /> <ClCompile Include="..\public\utility\binstream.cpp" />
<ClCompile Include="..\public\utility\memaddr.cpp" /> <ClCompile Include="..\public\utility\memaddr.cpp" />
<ClCompile Include="..\public\utility\module.cpp" /> <ClCompile Include="..\public\utility\module.cpp" />
@ -278,6 +279,7 @@
<ClInclude Include="..\public\avi\iavi.h" /> <ClInclude Include="..\public\avi\iavi.h" />
<ClInclude Include="..\public\avi\ibik.h" /> <ClInclude Include="..\public\avi\ibik.h" />
<ClInclude Include="..\public\bitmap\stb_image.h" /> <ClInclude Include="..\public\bitmap\stb_image.h" />
<ClInclude Include="..\public\datamap.h" />
<ClInclude Include="..\public\dt_common.h" /> <ClInclude Include="..\public\dt_common.h" />
<ClInclude Include="..\public\iengine.h" /> <ClInclude Include="..\public\iengine.h" />
<ClInclude Include="..\public\client_class.h" /> <ClInclude Include="..\public\client_class.h" />

View File

@ -654,6 +654,9 @@
<ClCompile Include="..\engine\gl_rmain.cpp"> <ClCompile Include="..\engine\gl_rmain.cpp">
<Filter>sdk\engine</Filter> <Filter>sdk\engine</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\public\datamap.cpp">
<Filter>sdk\public</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="..\client\cdll_engine_int.h"> <ClInclude Include="..\client\cdll_engine_int.h">
@ -1898,6 +1901,9 @@
<ClInclude Include="..\public\dt_common.h"> <ClInclude Include="..\public\dt_common.h">
<Filter>sdk\public</Filter> <Filter>sdk\public</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\public\datamap.h">
<Filter>sdk\public</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Image Include="..\shared\resource\lockedserver.png"> <Image Include="..\shared\resource\lockedserver.png">