-
Notifications
You must be signed in to change notification settings - Fork 6
/
Post_Network_Data_Received.hpp
128 lines (89 loc) · 3.41 KB
/
Post_Network_Data_Received.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
struct Prediction_Field_Structure
{
__int32 Type;
char* Name;
__int32 Offset[2];
unsigned __int16 Size;
__int8 Additional_Bytes_1[12];
struct Prediction_Descriptor_Structure* Descriptor;
__int32 Bytes;
__int8 Additional_Bytes_2[12];
};
struct Prediction_Descriptor_Structure
{
Prediction_Field_Structure* Fields;
__int32 Size;
__int8 Additional_Bytes_1[4];
Prediction_Descriptor_Structure* Parent;
__int8 Additional_Bytes_2[6];
};
struct Prediction_Copy_Structure
{
__int8 Additional_Bytes_1[8];
void* Source;
__int8 Additional_Bytes_2[11];
Prediction_Field_Structure* Field;
__int8 Additional_Bytes_3[4];
Prediction_Descriptor_Structure* Descriptor;
__int8 Additional_Bytes_4[24];
void Construct(void* Destination, void* Source, void* Handler)
{
using Construct_Type = void(__thiscall*)(void* Prediction_Copy, __int32 Type, void* Destination, __int8 Destination_Packed, void* Source, __int8 Source_Packed, __int8 Count_Errors, void* Unknown_Parameter_1, void* Unknown_Parameter_2, __int8 Report_Errors, void* Handler);
Construct_Type(605209952)(this, 2, Destination, 0, Source, 1, 1, nullptr, nullptr, 1, Handler);
}
};
__int32 Compute_Flat_Offset(__int32* Offset, Prediction_Descriptor_Structure* Descriptor, void* Search_Field, __int32 Base_Offset)
{
if (*Offset == 0)
{
if (Descriptor->Parent)
{
Compute_Flat_Offset(Offset, Descriptor->Parent, Search_Field, Base_Offset);
}
__int32 Field_Number = 0;
Traverse_Fields_Label:
{
Prediction_Field_Structure* Field = &Descriptor->Fields[Field_Number];
if (Field == Search_Field)
{
*Offset = Base_Offset + Field->Offset[0];
}
else
{
if (Field->Type == 10)
{
Compute_Flat_Offset(Offset, Field->Descriptor, Search_Field, Base_Offset + Field->Offset[0]);
}
if (Field_Number != Descriptor->Size)
{
Field_Number += 1;
goto Traverse_Fields_Label;
}
}
}
}
return *Offset;
}
Prediction_Copy_Structure Predicton_Copy;
void Predicton_Copy_Compare(char* Class, void* Unknown_Parameter_1, void* Unknown_Parameter_2, void* Unknown_Parameter_3, void* Unknown_Parameter_4, void* Unknown_Parameter_5, __int8 Within_Tolerance, void* Unknown_Parameter_6)
{
if (Within_Tolerance == 1)
{
Prediction_Field_Structure* Field = Predicton_Copy.Field;
static std::unordered_map<void*, __int32> Flat_Offsets;
Byte_Manager::Copy_Bytes(0, (void*)(*(unsigned __int32*)607867332 + Compute_Flat_Offset(&Flat_Offsets[Field], Predicton_Copy.Descriptor, Field, 0)), Field->Bytes, (void*)((unsigned __int32)Predicton_Copy.Source + Field->Offset[1]));
}
}
void* Original_Post_Network_Data_Received_Caller;
void __thiscall Redirected_Post_Network_Data_Received(void* Unknown_Parameter, __int32 Commands_Acknowledged)
{
void* Local_Player = *(void**)607867332;
void* Result = *(void**)((unsigned __int32)Local_Player + 700 + (90 - Commands_Acknowledged * 90 % -~90) * 4);
if (Result != nullptr)
{
Predicton_Copy.Construct(Local_Player, Result, (void*)Predicton_Copy_Compare);
using Transfer_Data_Type = __int32(__thiscall*)(Prediction_Copy_Structure* Prediction_Copy, void* Unknown_Parameter, __int32 Entity_Number, Prediction_Descriptor_Structure* Descriptor);
Transfer_Data_Type(605218912)(&Predicton_Copy, nullptr, -1, (Prediction_Descriptor_Structure*)607768164);
}
(decltype(&Redirected_Post_Network_Data_Received)(Original_Post_Network_Data_Received_Caller))(Unknown_Parameter, Commands_Acknowledged);
}