mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
datamap_t init.
* Get datamap vars from class datamap.
This commit is contained in:
parent
9c1efe20ad
commit
d59d798d13
42
r5dev/public/datamap.cpp
Normal file
42
r5dev/public/datamap.cpp
Normal 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
45
r5dev/public/datamap.h
Normal 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); \
|
||||
}
|
@ -92,6 +92,7 @@
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\public\datamap.cpp" />
|
||||
<ClCompile Include="..\public\utility\binstream.cpp" />
|
||||
<ClCompile Include="..\public\utility\memaddr.cpp" />
|
||||
<ClCompile Include="..\public\utility\module.cpp" />
|
||||
@ -252,6 +253,7 @@
|
||||
<ClInclude Include="..\public\avi\iavi.h" />
|
||||
<ClInclude Include="..\public\avi\ibik.h" />
|
||||
<ClInclude Include="..\public\bitmap\stb_image.h" />
|
||||
<ClInclude Include="..\public\datamap.h" />
|
||||
<ClInclude Include="..\public\dt_common.h" />
|
||||
<ClInclude Include="..\public\iengine.h" />
|
||||
<ClInclude Include="..\public\client_class.h" />
|
||||
|
@ -612,6 +612,9 @@
|
||||
<ClCompile Include="..\game\client\viewrender.cpp">
|
||||
<Filter>sdk\game\client</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\public\datamap.cpp">
|
||||
<Filter>sdk\public</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\client\cdll_engine_int.h">
|
||||
@ -1802,6 +1805,9 @@
|
||||
<ClInclude Include="..\public\dt_common.h">
|
||||
<Filter>sdk\public</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\public\datamap.h">
|
||||
<Filter>sdk\public</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Image Include="..\shared\resource\lockedserver.png">
|
||||
|
@ -214,6 +214,7 @@
|
||||
<ClInclude Include="..\pluginsystem\pluginsystem.h" />
|
||||
<ClInclude Include="..\protoc\cl_rcon.pb.h" />
|
||||
<ClInclude Include="..\protoc\sv_rcon.pb.h" />
|
||||
<ClInclude Include="..\public\datamap.h" />
|
||||
<ClInclude Include="..\public\dt_common.h" />
|
||||
<ClInclude Include="..\public\iengine.h" />
|
||||
<ClInclude Include="..\public\client_class.h" />
|
||||
@ -547,6 +548,7 @@
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\public\datamap.cpp" />
|
||||
<ClCompile Include="..\public\utility\binstream.cpp" />
|
||||
<ClCompile Include="..\public\utility\memaddr.cpp" />
|
||||
<ClCompile Include="..\public\utility\module.cpp" />
|
||||
|
@ -1257,6 +1257,9 @@
|
||||
<ClInclude Include="..\public\dt_common.h">
|
||||
<Filter>sdk\public</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\public\datamap.h">
|
||||
<Filter>sdk\public</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\common\opcodes.cpp">
|
||||
@ -1577,6 +1580,9 @@
|
||||
<ClCompile Include="..\materialsystem\cmaterialsystem.cpp">
|
||||
<Filter>sdk\materialsystem</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\public\datamap.cpp">
|
||||
<Filter>sdk\public</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\Dedicated.def" />
|
||||
|
@ -101,6 +101,7 @@
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\public\datamap.cpp" />
|
||||
<ClCompile Include="..\public\utility\binstream.cpp" />
|
||||
<ClCompile Include="..\public\utility\memaddr.cpp" />
|
||||
<ClCompile Include="..\public\utility\module.cpp" />
|
||||
@ -278,6 +279,7 @@
|
||||
<ClInclude Include="..\public\avi\iavi.h" />
|
||||
<ClInclude Include="..\public\avi\ibik.h" />
|
||||
<ClInclude Include="..\public\bitmap\stb_image.h" />
|
||||
<ClInclude Include="..\public\datamap.h" />
|
||||
<ClInclude Include="..\public\dt_common.h" />
|
||||
<ClInclude Include="..\public\iengine.h" />
|
||||
<ClInclude Include="..\public\client_class.h" />
|
||||
|
@ -654,6 +654,9 @@
|
||||
<ClCompile Include="..\engine\gl_rmain.cpp">
|
||||
<Filter>sdk\engine</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\public\datamap.cpp">
|
||||
<Filter>sdk\public</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\client\cdll_engine_int.h">
|
||||
@ -1898,6 +1901,9 @@
|
||||
<ClInclude Include="..\public\dt_common.h">
|
||||
<Filter>sdk\public</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\public\datamap.h">
|
||||
<Filter>sdk\public</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Image Include="..\shared\resource\lockedserver.png">
|
||||
|
Loading…
x
Reference in New Issue
Block a user